EasyMock: поведение Time не проверяется на предмет строгой насмешки - PullRequest
0 голосов
/ 23 февраля 2012

Мой модульный тест содержит «строгий» макет моего DAO. Мое насмешливое поведение является общим для всех тестов, кроме @Test ниже. Поэтому я добавил это общее насмешливое поведение в метод @Before. Затем к самой @Test добавляется специальное насмешливое поведение:

@Before
public void setUp() {
    reset(myDAO);
    expect(myDAO.findMyObjects(code, myID)).andReturn(myObjects).times(1);
    expect(myDAO.findMyObjects(myID)).andReturn(myObjects).times(1);
    replay(myDAO);
}

@Test
public void testMyFirstMethod() {
    reset(myDAO);
    expect(myDAO.findMyObjects(myID)).andReturn(new ArrayList<MyObject>()).times(200);
    replay(myDAO);

    Set<OtherObject> otherObjects = myTestClass.myTestMethod(null, myID);
    assertEquals("Empty set is returned", 0, otherObjects.size());
}

Я проверил, что поведение .times (1) проверено в других моих модульных тестах. Однако в приведенном выше тесте поведение .times (200) не проверяется (так как мой модульный тест вызывает его только один раз) Почему это?

1 Ответ

3 голосов
/ 23 февраля 2012

Вам нужно использовать EasyMock.verify(myDAO), чтобы сообщить EasyMock, что воспроизведение завершено и что ожидания должны быть удовлетворены.

Когда вы звоните myTestMethod только один раз, EasyMock не знает, что у него естьпроверить myDAO до завершения метода, чтобы он ожидал новых вызовов, а затем метод успешно завершил работу, при этом EasyMock не заметил, что findMyObjects не вызывалось достаточно раз.

Почему times(1)поведение проверяется, я не уверен, но я подозреваю, что проверка может быть вызвана другими тестами.

Тем не менее, ваша организация метода @Before действительно отключена.Вы устанавливаете ожидания, запускаете воспроизведение, сбрасываете, а затем воспроизводите снова?

...