Как проверить метод макета с EasyMock - PullRequest
0 голосов
/ 07 января 2012

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

4 голосов
/ 07 января 2012

Моды предназначены для замены зависимости для класса, который вы тестируете. Это означает, что если вы тестируете класс A и он вызывает метод класса B, вы имитируете класс B с ожидаемым поведением, поэтому вы можете тестировать A изолированно.

Вы получаете эту ошибку, потому что когда вы издеваетесь над классом, вы не должны использовать его как обычно. Вы должны установить ожидания, а затем использовать свой макет вместе с другим классом. Вы никогда не устанавливаете ожидание, что должен быть вызван methodIwantToTest, поэтому, когда вы вызываете его, возникает ошибка (так как это не ожидалось платформой).

Тем не менее, вы можете создать частичный макет. Смотрите эту документацию и ищите "Частично", где вы только издеваетесь над определенными методами.

2 голосов
/ 07 января 2012

Так же, как и в 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);
}
...