2 ответов:
вы используете тупиковый возврат для вызова метода на макете, который вы ожидаете, но в остальном не заинтересованы. Вы используете обычный возврат для вызова "обычного" метода.
рассмотрим следующий способ:
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, в то время как вы не могли иначе заботиться меньше о оно.при написании модульного теста на основе EasyMock для этого метода вы бы
andStubReturn()вызовgetName()и использовать обычныйandReturn()для вызоваpostMessage(String). Когда вы проверяете макет объекта, он будет рассматривать только последний, и ваш тест не сломается, если вы измените конфигурацию log4j.
дополнительно для ясности.
Если вы используете .andStubReturn () (или если вы используете .Андрюша (фу).anyTimes ()) не будет минимального ожидаемого количества звонков. Поэтому, если вы устанавливаете фиктивное ожидание, используя любой из этих двух, и издевательский метод не вызывается, то .проверить() вызов не будет утверждать.
пример, что будет не утверждать, когда издевались метод не называется;
FooClass myFooClass = EasyMock.createNiceMock(FooClass.class); EasyMock.expect(myFooClass.someMethod(EasyMock.anyInt()).andStubReturn(true); EasyMock.replay(myFooClass); EasyMock.verify(myFooClass);пример будет утверждать, когда глумились метод не вызывается;
FooClass myFooClass = EasyMock.createNiceMock(FooClass.class); EasyMock.expect(myFooClass.someMethod(EasyMock.anyInt()).andReturn(true).atLeastOnce(); EasyMock.replay(myFooClass); EasyMock.verify(myFooClass);
Comments