Ошибка компиляции при использовании EasyMock.expect () в очень простом примере? - PullRequest
8 голосов
/ 26 августа 2011

Я пытаюсь сделать очень простой пример, используя 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 ]

10 голосов
/ 26 августа 2011

Если вы хотите проверить 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;
        }
    });
}
9 голосов
/ 26 августа 2011

Поскольку ваш метод send () возвращает void, просто вызовите метод mock с ожидаемыми значениями и повторите:

SomeInterface mock = EasyMock.createMock(SomeInterface.class);
SomeBase expected = new DerivesFromSomeBase(); 
mock.send(expected);
replay(mock);
0 голосов
/ 26 августа 2011

Вы не можете сценарий методов с пустым возвратом таким образом; проверьте этот вопрос , чтобы получить хороший ответ о том, как можно высмеивать поведение вашего send метода на вашем expected объекте.

0 голосов
/ 26 августа 2011

Поскольку вы издеваетесь над интерфейсом, единственная цель при имитации метода - вернуть результат из этого метода.В этом случае кажется, что возвращаемый тип вашего метода send является void.Метод EasyMock.expect является универсальным и ожидает тип возвращаемого значения, в результате чего компилятор сообщает вам, что вы не можете использовать метод void, поскольку у него нет возвращаемого типа.информацию см. в документации EasyMock API по адресу http://easymock.org/api/easymock/3.0/index.html.

...