JMockit Expectation API:如何在方法/构造函数调用时抛出异常

22

在使用 JMockit 时,我希望能够像这样在构造函数调用时抛出一个异常

new Expectations(){
        {
           new FirefoxDriver();//Want to throw IllegalStateException here but how?
        }
};
2个回答

28

要为记录的期望值指定结果,请将其分配到result字段中(无论是返回值还是要抛出的异常):

new Expectations() {{
    someMockedMethodOrConstructorInvocation(...); result = new IllegalStateException();
}};

我已经尝试了上述方法,但是它并没有模拟,而是调用了实际的构造函数并创建了对象 :( - Affan Hasan
2
你只能在已经被 mocked 的方法或构造函数上记录期望;通常,这意味着你需要使用其中一个 mocking 注解(如 "@Mocked")声明一个 mock 字段或 mock 参数。否则,实际的方法或构造函数确实会被执行。 - Rogério
@Rogério:在你的例子中添加模拟字段会更好。 :-) 对于Affan的情况,我认为只需要 new Expectations(FirefoxDriver.class) {{...}}; 就可以了,但我对JMockit还不太自信...也许在方法中添加 @Test(expected = IllegalStateException),然后在期望块之后调用 new FirefoxDriver(); - Amos M. Carpenter

0

我们应该将要模拟的类作为参数添加到测试用例的方法中。通过使用结果,我们可以模拟方法的输出。

@Test
    public void testCase(@Mocked final ClassToMock classToMockObject){  

         new NonStrictExpectations() {
                {       
        classToMockObject.methodToMock();result=NullPointerException(); 
            }};

        classToMockObject.methodToMock(); //calling the method to throw exception
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接