我想在JUnit4中测试一个方法,它不会在第一个捕获的异常处传递,但是如果对测试方法的所有调用都抛出异常。我想知道这是否可能。
我解释一下:让我们说我有方法
public void setFromFen(String fenValue) throws IllegalArgumentException
在班级职位。
在PositionTest Junit4课程中,我想做类似的事情:
@Test(expected=IllegalArgumentException.class){
...
setFromFen("2"); // throws IllegalArgumentException
setFromFen("8/8/8/8/8/8/8/8"); // does not throw IllegalArgumentException
...
}
这样只有在对setFromFen的所有调用都失败时,测试才会成功。
在这种情况下,虽然第二个测试没有抛出IllegalArgumentException,但测试成功了:这不是我想要的。
只有当所有测试行都抛出IllegalArgumentException时才能获得成功吗?
答案 0 :(得分:1)
我认为这超出了注释的可能性。 你可能需要这些内容:
@Test
public void thatAllCallsFail() {
int failureCount = 0;
try {
setFromFen(this.sampleString1);
}
catch( final Exception e ) {
failureCount++;
}
try {
setFromFen(this.sampleString1);
}
catch( final Exception e ) {
failureCount++;
assertEquals("All 2 calls should have failed", failureCount, 2);
}
}
我不是第二次暗示这是一种很好的方式。
如果您正在寻找更通用的解决方案,可能需要将字符串添加到集合中并循环遍历它们......
@Test
public void thatAllCallsFail2() {
final String[] strings = new String[] { sampleString1, sampleString2 };
int failureCount = 0;
for (final String string : strings) {
try {
setFromFen(string);
}
catch( final Exception e ) {
failureCount++;
}
}
assertEquals("All " + strings.length + " calls should have failed", failureCount, strings.length);
}
当然,如果测试失败,这些解决方案都不会告诉您哪个调用没有抛出异常。