【问题标题】:EasyMock 3.0 Mocked class needs to throw an exception if any method gets calledEasyMock 3.0 模拟类需要在调用任何方法时抛出异常
【发布时间】:2012-03-06 15:08:47
【问题描述】:

我想模拟一个类,以便在调用任何方法时抛出异常。我想这样做的原因是,我不希望在我的测试中出现 NullpointerException,我宁愿模拟每个对象,声明为一个实例变量,它是带有异常东西的空值,所以如果它上面有一个方法被调用我得到一个适当的异常,我立即看到出了什么问题。 EasyMock 3.0 是否提供了这样的东西,还是我需要以其他方式来做?

提前致谢

【问题讨论】:

    标签: java exception easymock


    【解决方案1】:

    这不是 EasyMock 的默认行为吗?一旦调用EasyMock.verify(mocks),对模拟对象的任何意外调用都会导致异常。请参阅 EasyMock 文档 - “Nice Mocks”部分对此进行了解释:http://easymock.org/EasyMock3_0_Documentation.html

    以下测试对我来说失败了AssertionError,这应该是你要找的:

    @Test
    public void testFoo() {
        List list = EasyMock.createMock(List.class);
    
        EasyMock.replay(list);
    
        list.size();
    
        EasyMock.verify(list);
    }
    

    【讨论】:

    • 在我的示例中,列表将为空,因为有人忘记声明或意外删除它(例如在 @Before 中)!然后我将这个对象设置在另一个使用它的类中,所以我将在那里有一个 Nullpointer。我想防止这种情况发生,并在它发生时抛出一个更好的异常。然后,您可以更快地找出问题所在。在运行测试之前检查不是我想要的,因为不是每个测试都使用之前创建的每个对象!谢谢!
    【解决方案2】:

    考虑到相同的列表示例,当它被调用时,您可能会遇到异常

    List list = EasyMock.createMock(List.class);
    EasyMock.expect(list.size()).andThrow(new OurOwnException()).anyTimes();
    EasyMock.replay(list);
    

    每当调用 size() 方法时,这总是会抛出您的自定义异常。 你期待这种行为吗?

    【讨论】:

    • 这很好,但是有没有办法为list 上的每种方法 执行此操作?在示例中仅配置了 size 方法,并且为每个方法单独配置是不切实际的。
    猜你喜欢
    • 2011-06-28
    • 1970-01-01
    • 2011-03-30
    • 2023-03-25
    • 1970-01-01
    • 2011-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多