我试图测试一个特定的方法从方法抛出预期的异常.根据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.
什么可能导致错误的失败?
我发现了这个问题.
我使用的TestRunner是正确的(JUnit 4),但是,我将我的测试类声明为:
public class CommandTest extends TestCase
我假设它导致测试运行器将其视为JUnit 3测试.我删除extends TestCase
并收到了预期的结果.