StreamSupport的Junit测试用例

问题描述 投票:0回答:1

我是测试用例的新手,我尝试了几种方法来为下面的代码编写测试用例,但从未成功。如何使用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);
java spring-boot junit mockito powermockito
1个回答
0
投票

虽然使用大量模拟可以模拟每个呼叫,但我建议您使用另一种方法。

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

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

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

在这种情况下,您可能希望通过提供各种输入集并期望一些输出来测试其功能。如果输入中有null -s怎么办?它会失败还是过滤掉需要的东西。如果集合为空怎么办?如果确实有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 
  }  

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

© www.soinside.com 2019 - 2024. All rights reserved.