用于StreamSupport的Junit测试案例

时间:2019-11-25 05:14:22

标签: java spring-boot junit mockito powermockito

我是测试用例的新手,我尝试了几种方法来为下面的代码编写测试用例,但从未成功。如何使用Powermockito为下面的代码编写junit测试用例?

StreamSupport.stream(irSet.spliterator(), false)
            .filter(iResultRow -> iResultRow !=null)
            .mapToInt(iResultRow ->{
                String event = iResultRow.get("STF_TY_GH");
                return StringUtils.isNotBlank(event) ? Integer.parseInt(event) : 1;
            }).findFirst().orElse(1);

1 个答案:

答案 0 :(得分:3)

尽管使用大量模拟可以模拟每个调用,但我还是建议您使用另一种方法。

因此,您将有一些输入集(irSet)变量产生的流。该流进行“某些”处理并返回整数结果。

因此,如果您“想象”它是一个黑匣子:一种看起来像这样的功能:

int doSomething(Set<SomeRow> irSet) {
  ... your implementation is here...
}

在这种情况下,您可能想要通过提供各种输入集并期望一些输出来测试其功能。如果输入中有null-怎么办?它会失败还是过滤掉需要的东西。如果集合为空怎么办?如果确实有SomeRow个数据的STF_TY_GH怎么办,如果集合中没有这样的行怎么办?

这里是一个测试,例如:

  @Test
  public void test_rows_with_null_are_processed_correctly() {

      // setup:
      Set<SomeRow> input = ...// prepare a set with null values

      // when:
      Integer actual = underTest.doSomething(input)

      // then:
      // verify this "actual" whether it should be 1 or something else 
  }  

全部,仅将模拟用于交互(使用您无法真正实例化的东西,例如DB API /远程HTTP调用)或与测试的代码无关的东西,并将其用作测试的依赖项代码进行交互。毕竟,单元测试的目标是测试您的代码(在这种情况下,doSomething的实现而不是模拟所有内容)。

相关问题