EasyMock andReturn () vs andStubReturn()



в чем разница между использованием andReturn(T value) vs andStubReturn(T value) для EasyMock?



в какой ситуации вы бы использовать andStubReturn() здесь andReturn() не может достичь того же результата?

732   2  

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

    Ничего не найдено.