在非常简单的示例中使用EasyMock.expect()时编译错误?

时间:2011-08-26 12:47:34

标签: java unit-testing compiler-errors easymock

我正在尝试使用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)

有人能指出我正确的方向吗?我完全迷失了。

4 个答案:

答案 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方法的行为。