即使未引发异常,JMock也会导致JUnit ExpectedException通过

时间:2012-08-03 16:25:01

标签: java junit jmock

当我将JMock与JUnit ExpectedException一起使用时,即使没有抛出异常,测试似乎也会通过。例如,下面的测试失败,应该如此。但如果我取消注释两条注释行,它就会通过。难道我做错了什么?这两个组件之间是否存在不兼容性?

//@RunWith(JMock.class)
public class JUnitJMockTest {

    @Rule
    public ExpectedException exception = ExpectedException.none();

    //Mockery context = new JUnit4Mockery();

    @Test
    public void test() {

        exception.expect(NullPointerException.class);

    }

}

1 个答案:

答案 0 :(得分:4)

我认为您可能会发现this page有用。引用它:

  

请注意,如果将规则与某些@RunWith类合并,则可能会出现误报。具体来说,如果您在上面的示例中使用扩展JUnit4ClassRunner的类运行,则测试将不再失败。你会得到误报。

     

例如,如果您在2.6.0之前使用JMock版本并使用@RunWith(JMock.class),则会遇到此问题。较早版本的JMock.class扩展JUnit4ClassRunnerJUnit4ClassRunner会忽略规则。较新的BlockJUnit4ClassRunner支持规则,JMock post 2.6.0将其扩展为JMock.class

简而言之,听起来您可能正在使用2.6.0之前的JMock版本,更新可能会解决您的问题。