从 JMockit 转换为 Mockito 框架
Convert from JMockit to Mockito framework
我见过一些人从 Mockito 转向 JMockit 的例子,但我做的恰恰相反。我不太确定如何处理 @Mocked 参数。这些只是成为@Mock 实例变量吗?我认为 NonStrictExpectations 子句应该变成 "when" 子句,例如:
when(rpManager.login()).thenReturn(true);
验证部分变为 "verify" 子句。
这是我正在转换的完整测试用例的示例。
@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;
}};
}
Mockito,你是对的,不期望任何 when
子句是实际需要的。顾名思义,当这个和那个发生时,就做点什么——如果没有发生,那也没关系。
要确保确实调用了某些内容,请使用 verify
。
@Mock
将创建一个模拟实例,正确:
@Mock
private MyService service; // will result in a mocked "MyService" instance
不要忘记调用 MockitoAnnotations.initMock(this);
或使用 @RunWith(MockitoJUnitRunner.class)
以确保实际使用注释。
我见过一些人从 Mockito 转向 JMockit 的例子,但我做的恰恰相反。我不太确定如何处理 @Mocked 参数。这些只是成为@Mock 实例变量吗?我认为 NonStrictExpectations 子句应该变成 "when" 子句,例如:
when(rpManager.login()).thenReturn(true);
验证部分变为 "verify" 子句。
这是我正在转换的完整测试用例的示例。
@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;
}};
}
Mockito,你是对的,不期望任何 when
子句是实际需要的。顾名思义,当这个和那个发生时,就做点什么——如果没有发生,那也没关系。
要确保确实调用了某些内容,请使用 verify
。
@Mock
将创建一个模拟实例,正确:
@Mock
private MyService service; // will result in a mocked "MyService" instance
不要忘记调用 MockitoAnnotations.initMock(this);
或使用 @RunWith(MockitoJUnitRunner.class)
以确保实际使用注释。