Преобразование из JMockit в Mockito framework

Я видел несколько примеров перехода людей с Mockito на JMockit, но я делаю наоборот. Я не совсем уверен, что делать с параметрами @Mocked. Они просто становятся переменными экземпляра @Mock? Я думаю, что предложение NonStrictExpectations должно стать предложением «когда», например:

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;
    }};
}

person cicit    schedule 28.10.2015    source источник


Ответы (1)


Mockito, вы правы, не ожидает, что какое-либо предложение when действительно понадобится. Как следует из названия, КОГДА происходит то или иное, тогда делайте что-нибудь — если этого не произошло, то это тоже нормально.

Чтобы убедиться, что что-то действительно было вызвано, используйте verify.

@Mock создаст издевательский экземпляр, правильно:

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

Не забудьте либо вызвать MockitoAnnotations.initMock(this);, либо использовать @RunWith(MockitoJUnitRunner.class), чтобы убедиться, что аннотации действительно используются.

person Florian Schaetz    schedule 28.10.2015
comment
Я понимаю эту часть. Я не уверен, что делать с параметрами, разрешенными JMockit, а также со специфическими аннотациями JMockit, такими как @Cascading - person cicit; 28.10.2015
comment
Поведение @Cascading можно реализовать, используя соответствующий ответ по умолчанию для аннотации @Mock (или вызова Mockito.mock). Мне кажется, что для @Cascading лучшим эквивалентом Mockito будет Mockito.RETURNS_MOCKS. См. документ mockito, в котором есть кое-что интересное: docs.mockito. googlecode.com/hg/org/mockito/ - person Florian Schaetz; 28.10.2015
comment
В моей ситуации я обнаружил, что @Mock(answer = Answers.RETURNS_DEEP_STUBS) это то, что мне нужно было сделать для @Cascading - person cicit; 30.10.2015
comment
Ну, в Mockito есть ответ на все. Буквально. ;-) - person Florian Schaetz; 30.10.2015
comment
Хорошо, потому что у меня есть еще одна проблема, о которой я собираюсь опубликовать вопрос! :-) - person cicit; 30.10.2015