我看过一些人从Mockito转到JMockit的例子,但我正在做相反的事情。我不确定如何处理@Mocked参数。这些只是成为@Mock实例变量吗?我认为NonStrictExpectations子句应该成为“when”子句,如:
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;
}};
}
答案 0 :(得分:2)
Mockito,你说得对,不要指望实际需要任何when
条款。就像名字所暗示的那样,当这个和那个发生时,那么做一些事情 - 如果它没有发生,那么那也没关系。
要确保实际调用了某些内容,请使用verify
。
@Mock
将创建一个模拟实例,正确:
@Mock
private MyService service; // will result in a mocked "MyService" instance
不要忘记调用MockitoAnnotations.initMock(this);
或使用@RunWith(MockitoJUnitRunner.class)
来确保实际使用注释。