Мне интересно, можно ли определить поведение в easyMock, что позволяет выполнять «промежуточные» вызовы метода.EasyMock: комбинировать промежуточные все время со строгим макетом
Предположим, что я хочу, чтобы проверить поведение метода doSomething
в этом классе:
class MyObject {
MyOtherObject inner; // init as constructor param...
void doSomething() {
inner.call1();
inner.call2();
}
public String toString() {
return "MyObject{" + inner.getName() + "}";
}
}
Я имел этот тестовый код:
MyOtherObject mocked = EasyMock.createStrictMock(MyOtherObject.class);
MyObject obj = new MyObject(myOtherObject);
// methods need to be called in this order
EasyMock.expect(mocked.call1()).once();
EasyMock.expect(mocked.call2()).once();
obj.doSomething();
Когда я изменить реализацию MyObject.doSomething()
добавить протоколирование с использованием метод toString()
, мои тесты терпят неудачу, потому что я не добавил ожидание для MyOtherObject.getName()
.
Поскольку мне нужен строгий макет (с проверкой порядка методов), просто добавив, что это не сработает: EasyMock.expect(mocked.getName()).andReturn("blahblah").anyTimes()
.
Есть ли элегантный способ решить эту проблему? На данный момент я добавил этот оператор anyTimes() перед каждым «реальным» ожиданием, но он делает мой тест нечитаемым и трудноподдерживаемым.
Или мне нужно переключиться на другую тестовую структуру?
Возможно, ваш пример слишком прост, чтобы понять реальную проблему здесь, но почему у вас нет дескриптора метода 'getName'? Вы действительно не знаете, сколько раз это можно назвать в этом контексте? Неужели это будет больше, чем один раз? – mystarrocks
Мой пример действительно упрощен, и, конечно, я могу подсчитать, сколько раз этот метод вызывается. Точка: я не хочу, чтобы модульный тест зависел от добавления/изменения или даже включения/отключения вывода журнала. Более общий: я хочу исключить некоторые методы из «строгого» порядка. – geronimo