在一个单元测试下测试多个场景

RSM*_*RSM 1 groovy junit unit-testing

这就是我在groovy中进行单元测试的方式.

public void testSomeMethod() {
  doSomething(1,2,3,4);      //this is first test
  doSomething(11,22,33,44);   //this is second test
}


private void doSomething(a, b, c, d) {
  assertEquals(a, actual)
    }
Run Code Online (Sandbox Code Playgroud)

基本上我在同一测试下用不同的值调用doSomething 2次.它可能不是一个好的测试方法,但我只想尝试一下.

所以,问题是,如果第一次测试失败,第二次测试就不会被执行.

有没有办法可以强制它打印失败信息并转到下一个?

dma*_*tro 8

现在是你使用spock的好时机,你可以在那里进行数据驱动的测试,第二次测试不会被第一次测试.您可以获得更多灵活性,例如您要求的更多灵活性.

最终,测试看起来像:

void "test something"(){
    when:
       def result = doSomething(a, b, c, d)

    then:
       result == expectedResult

    where:
       a   | b  | c  | d   || expectedResult
       1   | 2  | 3  | 4   || 100           
       11  | 22 | 33 | 44  || 1000
}

private doSomething(a, b, c, d){...}
Run Code Online (Sandbox Code Playgroud)

您可以在spock框架文档中找到更多详细信息和/或查看这些问题.

顺便说一句,上面的测试示例可以过度简化,以使其更加流畅.;)

void "test something"(){
    expect:
       result == doSomething(a, b, c, d)

    where:
       a   | b  | c  | d   || result
       1   | 2  | 3  | 4   || 100           
       11  | 22 | 33 | 44  || 1000
}
Run Code Online (Sandbox Code Playgroud)