Junit 从JMockit转换到Mockito框架

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

我见过一些人从Mockito切换到JMockit的例子,但我做的恰恰相反。我真的不知道如何处理@Mocked参数。这些只是@Mock实例变量吗?我认为非严格预期条款应该变成“何时”条款,比如:

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中的每件事都有答案。字面意思是…)很好,因为我有另一个问题,我将发布一个问题!:-)