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

Posted

技术标签:

【中文标题】JMockit 期望 API:如何在方法/构造函数调用时抛出异常【英文标题】:JMockit Expectation API : How to throw an exception upon method/constructor invocation 【发布时间】:2015-03-11 16:07:32 【问题描述】:

在使用 JMockit 时,我想在 构造函数调用 上抛出一个 异常,如下所示:

new Expectations()
        
           new FirefoxDriver();//Want to throw IllegalStateException here but how?
        
;

【问题讨论】:

【参考方案1】:

要为记录的期望指定结果,请将其(要返回的值或要抛出的异常)分配给 result 字段:

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

【讨论】:

以上我都试过了;但不是模拟,而是调用实际的构造函数并创建对象:( 你只能在被mocked的方法或构造函数上记录期望;通常,这意味着您使用模拟注释之一声明模拟字段或模拟参数,例如“@Mocked”。否则,实际的方法或构造函数确实会被执行。 @Rogério:将模拟字段添加到您的示例中会很好。 :-) 我 认为 对于 Affan 的情况,它应该只是 new Expectations(FirefoxDriver.class) ...;,但对 JMockit 还不够自信......也许将 @Test(expected = IllegalStateException) 添加到方法中,然后在之后调用 new FirefoxDriver();期望障碍?【参考方案2】:

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

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

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

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

【讨论】:

以上是关于JMockit 期望 API:如何在方法/构造函数调用时抛出异常的主要内容,如果未能解决你的问题,请参考以下文章

JMockit - 期望 - 匹配包含模拟对象作为参数的方法调用

jmockit 中文网 构造函数中文代码块

Jmockit 期望错误

JMockit 基础:模拟对象、模拟参数、期望

Jmockit之mock特性详解

JMockit对super方法的mock实践