我正在尝试使用EasyMock的一个非常简单的示例,但是我根本无法使其构建。我有以下测试用例:
@Test
public void testSomething()
{
SomeInterface mock = EasyMock.createMock(SomeInterface.class);
SomeBase expected = new DerivesFromSomeBase();
EasyMock.expect(mock.send(expected));
}
但是我在EasyMock.expect(...
行中收到以下错误:
The method expect(T) in the type EasyMock is not applicable for the arguments (void)
有人能指出我正确的方向吗?我完全迷失了。
答案 0 :(得分:10)
如果要测试void
方法,请在模拟上调用要测试的方法。然后调用expectLastCall()
方法。
以下是一个例子:
@Test
public void testSomething()
{
SomeInterface mock = EasyMock.createMock(SomeInterface.class);
SomeBase expected = new DerivesFromSomeBase();
mock.send(expected);
EasyMock.expectLastCall().andAnswer(new IAnswer<Object>() {
public Object answer() {
// do additional assertions here
SomeBase arg1 = (SomeBase) EasyMock.getCurrentArguments()[0];
// return null because of void
return null;
}
});
}
答案 1 :(得分:9)
由于send()方法返回void,因此只需使用期望值调用mock方法并重播:
SomeInterface mock = EasyMock.createMock(SomeInterface.class);
SomeBase expected = new DerivesFromSomeBase();
mock.send(expected);
replay(mock);
答案 2 :(得分:0)
由于您在模拟接口,因此模拟方法的唯一目的是从该方法返回结果。在这种情况下,您的'send'方法的返回类型似乎无效。 'EasyMock.expect'方法是通用的,并且需要一个返回类型,这会导致编译器告诉您不能使用void方法,因为它没有返回类型。
有关详细信息,请参阅http://easymock.org/api/easymock/3.0/index.html上的EasyMock API文档。
答案 3 :(得分:0)
您不能以这种方式使用void返回脚本方法;查看this question,了解如何模拟send
对象上expected
方法的行为。