2015-10-28 74 views
0

我已經看到一些人從Mockito切換到JMockit的例子,但我正在做相反的事情。我不確定如何處理@Mocked參數。這些只是成爲@Mock實例變量嗎?我認爲NonStrictExpectations條款應成爲「何時」的條款,如:從JMockit轉換到Mockito框架

when(rpManager.login()).thenReturn(true); 

和考證節變成「驗證」的條款。

這是我正在轉換的完整測試用例的一個示例。

@Test 
public void testGetOffersUnsuccessfulResponse(@Mocked final RPRequest mockRequest, @Mocked final RPResponse mockResponse) { 

    final String sessionId = "123"; 

    new NonStrictExpectations() {{ 
     rpManager.login(); returns(true); 
     rpManager.newRequest(anyString); returns(mockRequest); 
     mockRequest.sendRequest(); returns(mockResponse); 
     mockResponse.isSuccess(); returns(false); 
    }}; 

    final EpiphanyConnection connection = new EpiphanyConnection(getDummyConnectionProperties(), getDummyActionMapping()); 
    assertTrue(connection.connect()); 

    final InteractionContext interactionContext = new InteractionContext(); 
    interactionContext.setRequestContext(new RequestContext()); 
    interactionContext.getRequestContext().setAction(getDummyActionMapping().keySet().iterator().next()); 

    interactionContext.setUserContext(new UserContext()); 
    interactionContext.getUserContext().setSessionId(sessionId); 

    final OfferTranslator offerTranslator = connection.fetchCommunications(interactionContext); 
    assertNotNull(offerTranslator); 

    new Verifications() {{ 

     // failure in the below likely indicates mismatched JSON string. 
     mockRequest.setData("SessionId", sessionId); 
     mockRequest.sendRequest(); times=1; 
    }}; 
} 

回答

2

的Mockito,你是正確的那裏,不希望被真正需要的任何when條款。就像這個名字所暗示的那樣,當這件事發生時,然後做一些事情 - 如果沒有發生,那麼也可以。

爲了確保實際上調用了某些東西,請使用verify

@Mock將創建一個實例嘲笑,正確的是:

@Mock 
private MyService service; // will result in a mocked "MyService" instance 

不要忘了或者調用MockitoAnnotations.initMock(this);或使用@RunWith(MockitoJUnitRunner.class),以確保註釋實際使用。

+0

我明白那一部分。我不知道該如何處理JMockit允許的參數以及JMockit特定註釋(如@Cascading –

+0

)@ @ Cascading'行爲可以通過使用'@ Mock'註釋的適當默認回答(或者'Mockito.mock '電話)。對我來說,對於'@ Cascading',最好的Mockito等價物是'Mockito.RETURNS_MOCKS'。看到有一些不錯的東西的mockito文檔:http://docs.mockito.googlecode.com/hg/org/mockito/Mockito.html#RETURNS_MOCKS –

+1

在我的情況下,我發現'@Mock(answer = Answers.RETURNS_DEEP_STUBS )'是我需要爲'@ Cascading'做的事情 –