Junit 从JMockit转换到Mockito框架
我见过一些人从Mockito切换到JMockit的例子,但我做的恰恰相反。我真的不知道如何处理@Mocked参数。这些只是@Mock实例变量吗?我认为非严格预期条款应该变成“何时”条款,比如:Junit 从JMockit转换到Mockito框架,junit,mockito,jmockit,Junit,Mockito,Jmockit,我见过一些人从Mockito切换到JMockit的例子,但我做的恰恰相反。我真的不知道如何处理@Mocked参数。这些只是@Mock实例变量吗?我认为非严格预期条款应该变成“何时”条款,比如: when(rpManager.login()).thenReturn(true); 验证部分变成“验证”子句 这是我正在转换的完整测试用例的一个示例 @Test public void testGetOffersUnsuccessfulResponse(@Mocked final RPRequest m
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;
}};
}
Mockito,您在这里是正确的,并不期望实际需要任何
when
子句。正如名字所暗示的,当这和那发生时,然后做一些事情——如果没有发生,那也没关系
要确保实际调用了某些内容,请使用验证
@Mock
将创建模拟实例,正确:
@Mock
private MyService service; // will result in a mocked "MyService" instance
不要忘记调用MockitoAnnotations.initMock(this)
或使用@RunWith(MockitoJUnitRunner.class)
确保注释被实际使用。我理解这一部分。我不确定如何处理JMockit允许的参数以及JMockit特定的注释,如@Cascading@Cascading
行为,可以通过使用@Mock
注释(或Mockito.Mock
调用)的适当默认答案来完成。在我看来,对于@Cascading
,最好的Mockito等价物应该是Mockito.RETURNS\u MOCKS
。查看mockito文档,它有一些不错的东西:在我的情况下,我发现@Mock(answer=Answers.RETURNS\u DEEP\u STUBS)
是我需要为@Cascading
做的事情,mockito中的每件事都有答案。字面意思是…)很好,因为我有另一个问题,我将发布一个问题!:-)