我真的是 JUnit 和一般单元测试的新手,我正在努力寻找正确的方法。处理意外异常的更好方法是什么?为什么?
方法一:
- 先抓到预期的,测试失败并发消息
- 在最后一个 catch block 中,捕获一般异常并通过一些“发生意外异常”消息使测试失败
方法二:
- 只捕获预期的,失败并显示消息
- 用
throws Exception
标记测试方法,让任何意外的“冒泡”完全脱离测试
更令人困惑的是,“意外异常”是指以下任一情况:
- 被测试方法声称抛出的异常,但在本例中是抛出。例如,我的方法抛出 IllegalArgumentException 和 NullPointerException,但在这个 try block 中,我希望它抛出 IllegalArgument; NullPointer 被认为是意外的。捕获并失败还是冒泡?
- 一个我真的无法预料的一般异常
我知道这个问题有点令人困惑,我自己也迷路了,但希望有人能给我任何提示。不会因为投反对票而责怪你,这仍然值得冒险:)
最佳答案
对于JUnit 的测试方法,基本上,如果该方法设法无错地结束,JUnit 就认为测试通过了。所以你应该做的是捕获所有应该到达的异常。在这种情况下,您可以执行以下操作:
@Test
public myMethodToTest()
{
try {
/* ... */
/* error should trigger before the following statement : */
fail("Reason");
} catch(GoodException e) { }
// no need to do anything since you expected that error
// You can let the test ends without further statement
}
@Test (expected=IndexOutOfBoundsException.class)
public void elementAt()
{
int[] intArray = new int[10];
int i = intArray[20]; // Should throw IndexOutOfBoundsException
}
如果你仍然想要,你仍然可以捕获不应该触发的异常,然后做类似的事情:
@Test
public myMethodToTest()
{
try {
/* ... */
} catch(BadException e) {
fail("Reason");
}
}
关于java - Java 单元测试中的意外异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16508142/