programing

EasyMock andReturn () 대 andStubReturn ()

yoursource 2021. 1. 15. 19:53
반응형

EasyMock andReturn () 대 andStubReturn ()


사용의 차이 무엇입니까 andReturn(T value)andStubReturn(T value)EasyMock에 대한은?

어떤 상황 에서 동일한 결과를 얻을 수없는 andStubReturn()을 사용 andReturn()하시겠습니까?


당신은 일어날 것으로 예상되는 모의 메소드 호출에 대해 스텁 리턴을 사용하지만 다른 방법으로는 관심이 없습니다. "일반"메소드 호출을 위해 정규 리턴을 사용합니다.

다음 방법을 고려하십시오.

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 ()을 사용하는 경우 (또는 .andReturn (foo) .anyTimes ()를 사용하는 경우) 예상되는 최소 호출 수는 없습니다. 따라서이 두 가지 중 하나를 사용하여 모의 기대치를 설정하고 모의 메서드가 호출되지 않으면 .verify () 호출이 어설 션되지 않습니다.

mocked 메서드가 호출되지 않을 때 주장 하지 않는 예제 ;

FooClass myFooClass = EasyMock.createNiceMock(FooClass.class);
EasyMock.expect(myFooClass.someMethod(EasyMock.anyInt()).andStubReturn(true);
EasyMock.replay(myFooClass);

EasyMock.verify(myFooClass);

mocked 메서드가 호출되지 않을 때 주장 하는 예제 ;

FooClass myFooClass = EasyMock.createNiceMock(FooClass.class);
EasyMock.expect(myFooClass.someMethod(EasyMock.anyInt()).andReturn(true).atLeastOnce();
EasyMock.replay(myFooClass);

EasyMock.verify(myFooClass);

참조 URL : https://stackoverflow.com/questions/3740376/easymock-andreturn-vs-andstubreturn

반응형