2

这就是我在 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)
    }

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

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

有没有办法强制它打印失败消息并继续下一个?

4

2 回答 2

9

现在是您使用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){...}

您可以在 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
}
于 2013-09-19T22:15:47.890 回答
1

虽然我同意使用 Spock(伟大的框架)的建议,但如果您不想包含其他依赖项,也可以使用JUnit 参数化测试。

于 2013-09-19T23:58:06.777 回答