如何使用EasyMock测试模拟方法

时间:2012-01-07 01:48:31

标签: java testing easymock

我尝试使用easyMock测试对象中的方法。 我做这样的事情:

MyObject myObject = createMock(MyObject.class);
expect(myObject.someMethod()).andReturn(someReturn);
replay(myObject);
myObject.methodIwantToTest(); // here assertion or sth like this
verify(myObject);

像这样的代码抛出异常,不期望methodIwantToTest。如何测试这种方法?

2 个答案:

答案 0 :(得分:4)

模拟旨在替换您正在测试的类的依赖项。这意味着如果您正在测试类A,并且它在类B上调用一个方法,那么您可以使用预期的行为模拟类B,因此您可以单独测试A.

您收到该错误,因为当您模拟一个类时,您不应该正常使用它。您应该设置期望,然后将模拟与另一个类一起使用。你永远不会设置应该调用methodIwantToTest的期望,因此当你调用它时,会出现错误(因为框架没有预期)。

那就是说,你可以创建一个局部模拟。请参阅this documentation并查找“部分”,您只需模拟某些方法。

答案 1 :(得分:2)

正如hvgotcodes所说,Mocks是用于模拟被测试类(CUT)依赖关系的对象,因此可以将CUT与其他代码隔离开来进行测试。

虽然可用,但通常不建议使用Partial Mocks。提出的论点是,当您的软件设计良好时,不需要使用部分模拟。但是在某些情况下,使用部分模拟可能很重要。在您的情况下,部分模拟可以按如下方式进行,

@Test
public void testSomething(){
    MyObject myObject = createMockBuilder(MyObject.class)
       .addMockedMethod("someMethod").createMock();
    expect(myObject.someMethod()).andReturn(someReturn);
    replay(myObject);
    myObject.methodIwantToTest();
    verify(myObject);
}