我正在尝试测试特定方法是否会从方法中引发预期的异常。根据 JUnit4 文档和这个答案,我将测试写为:
@Test(expected=CannotUndoException.class)
public void testUndoThrowsCannotUndoException() {
// code to initialise 'command'
command.undo();
}
但是,此代码未通过 JUnit 测试,将抛出的(和预期的)异常报告为错误。
我正在测试的方法在正文中只有这个:
public void undo() {
throw new CannotUndoException();
}
此外,以下测试通过:
public void testUndoThrowsCannotUndoException() {
// code to initialise 'command'
try {
command.undo();
fail();
} catch (CannotUndoException cue){
}
}
这意味着实际抛出了预期的异常。
我实际上打算更改方法以实际做某事,而不是仅仅抛出异常,但这让我很好奇是什么导致了问题,以免将来再次发生。
已进行以下检查:
- 导入测试用例的 CannotUndoException 是正确的
- JUnit 第 4 版是我的类路径中唯一的版本
- 干净和构建的 Eclipse 工作区并没有改变结果
我使用的是 JUnit 4.1,在同一个测试中我使用的是 Mockito。
什么可能导致错误失败?