Ответ 1
Вы используете возвращаемый ключ для вызова метода в макете, который вы ожидаете, но не интересуетесь другим. Вы используете регулярный возврат для "обычного" вызова метода.
Рассмотрим следующий метод:
public void someMethod(String arg) {
if (logger.isDebugEnabled()) {
logger.debug("Calling doSomething() on service "
+ service.getName().hashCode());
}
service.postMessage("{" + arg + "}");
if (logger.isDebugEnabled()) {
logger.info("Finished calling doSomething() on service "
+ service.getName().hashCode());
}
}
... где service
- макетное поле. Вещь hashCode()
в операторах журнала надуманна, но дело в том, что ваш макет должен отвечать на любое количество вызовов getName()
, чтобы избежать NPE, в то время как вы не могли иначе заботиться об этом.
При написании метода unit test на основе EasyMock для этого метода вы должны andStubReturn()
вызвать getName()
и использовать обычный andReturn()
для вызова postMessage(String)
. Когда вы проверяете макет объекта, он будет рассматривать только последний, и ваш тест не прерывается, если вы измените конфигурацию log4j.