2012-12-17 2 views
17

EasyMock을 사용하여 단위 테스트를하고 있는데 EasyMock.expectLastCall()의 사용법을 이해하지 못합니다. 아래 코드에서 볼 수 있듯이 다른 객체의 메서드에서 void가 반환되는 메서드를 반환합니다. 나는 EasyMock이 메소드 호출을 기대하도록해야한다고 생각 하겠지만, expectLastCall() 호출을 주석 처리하려고 시도했지만 여전히 작동한다. 그것은 EasyMock.anyObject())을 예상 호출로 등록했거나 계속 진행 중입니까?void 메쏘드가있는 EasyMock 기대

MyObject obj = EasyMock.createMock(MyObject.class); 
MySomething something = EasyMock.createMock(MySomething.class); 
EasyMock.expect(obj.methodThatReturnsSomething()).andReturn(something); 

obj.methodThatReturnsVoid(EasyMock.<String>anyObject()); 

// whether I comment this out or not, it works 
EasyMock.expectLastCall(); 

EasyMock.replay(obj); 

// This method calls the obj.methodThatReturnsVoid() 
someOtherObject.method(obj); 

EasyMock에 대한 API의 문서는 말한다 이것에 대해 expectLastCall() :

Returns the expectation setter for the last expected invocation in the current thread. This method is used for expected invocations on void methods. 
+0

이 질문에 내가 찾던하지만 대답과 결합 요겐 의견이 내 문제를 이해 도움이되지 것이었다. 여기에 먼저와 줘서 고마워. – DaShaun

답변

23

이 방법은 IExpectationSetters을 통해 당신에게 기대의 핸들을 반환; void 메소드가 호출되었는지 여부와 관련 동작을 검증 (선언)하는 기능을 제공합니다. IExpectationSetters의

EasyMock.expectLastCall().once(); 
EasyMock.expectLastCall().atLeastOnce(); 
EasyMock.expectLastCall().anyTimes(); 

자세한 API는 here입니다.

예제에서 핸들을 얻고 아무 것도하지 않는 경우 따라서 문을 열거 나 제거하는 데 영향을주지 않습니다. Getter 메서드를 호출하거나 일부 변수를 선언하고 사용하지 않는 것과 매우 비슷합니다. 당신이 더 만 확인해야 할 때

+0

내 테스트에서'methodThatReturnsVoid()'의 호출을 기대하면서 무엇을해야합니까 (또는 무엇을하고 있습니까?)? 그냥'replay()'전에 호출해야합니까? –

+0

@SotiriosDelimanolis 앞서 언급 한 것처럼 EasyMock.expectLastCall(). atLeastOnce();를 사용하면 메서드가 적어도 한 번 이상 성공적으로 호출되었음을 나타낼 수 있습니다. –

+0

나는 그것을 얻는다. 하지만'expectLastCall()'이 없다면 테스트는 계속 진행됩니다. mock 객체가 기대하지 않았으므로 실패하지 않아야합니까? –

2

는 당신은 EasyMock.expectLastCall(); 필요 "메서드가 호출되었다. (같은 기대 설정으로)"

당신이 방법은 당신이 있도록 호출 된 횟수를 확인 할 말을 의 추가

EasyMock.expectLastCall().once(); 
EasyMock.expectLastCall().atLeastOnce(); 
EasyMock.expectLastCall().anyTimes(); 

을 또는 당신이 다음 EasyMock.expectLastCall();입니다 상관하지 않는 경우 예외

EasyMock.expectLastCall().andThrow() 

를 던질하고 싶은 말은 불필요하며 아무런 차이가 없으면 성명서 "obj.methodThatReturnsVoid(EasyMock.<String>anyObject());"으로 기대를 설정하기에 충분합니다.

0

당신은 EasyMock.verify (..)을 누락

MyObject obj = EasyMock.createMock(MyObject.class); 
MySomething something = EasyMock.createMock(MySomething.class); 
EasyMock.expect(obj.methodThatReturnsSomething()).andReturn(something); 

obj.methodThatReturnsVoid(EasyMock.<String>anyObject()); 

// whether I comment this out or not, it works 
EasyMock.expectLastCall(); 

EasyMock.replay(obj); 

// This method calls the obj.methodThatReturnsVoid() 
someOtherObject.method(obj); 

// verify that your method was called 
EasyMock.verify(obj); 
+0

아니요, '확인'이 암시되었습니다.이 문제는 [Yogendra 's answer] (http://stackoverflow.com/a/13917432/438154)에서 설명합니다. 나는 내 모의 기대를 제대로 쓰지 않았다. –