Мокито издевается над пустыми методами - PullRequest
1 голос
/ 10 октября 2019

Я использую Мокито для тестирования, и у меня есть следующий сценарий. Я пытаюсь проверить этот код

public CartResponse processDeleteCartEntry(UUID cartId, Integer rowKey, JsonMessages messages)
        throws UnexpectedException {

    Cart cart = cartService.getById(cartId);

    CartResponse cartResponse = null;

    if (cart != null) {
        cartService.removeItem(cart, rowKey, messages);

        cartResponse = buildCartResponse(cart);
    }
    return cartResponse;
}

cartService.removeItem(cart, rowKey, messages); ничего не возвращает (void) , и это мой тестовый пример

@Test
public void testRemoveCartItem() throws UnexpectedException {
    Cart cart = getCart();

    //given
    given(cartService.getById(cart.getId())).willReturn(cart);

    //When
    CartResponse cartResponse = mobileAppCartHandler.processDeleteCartEntry(cart.getId(), 0, new JsonMessages());

    //Then
    assertNotNull(cartResponse);
    assertEquals(ResponseStatus.OK, cartResponse.getStatus());
    assertEquals(1, cartResponse.getEntries().size());

}

Я делаюне хочу делать фактический вызов, чтобы удалить элемент, но в то же время он должен удалить элемент, чтобы я мог его утверждать. В моей корзине 2 предмета, и один должен быть после удаления. Должен ли я использовать when условие?

Ответы [ 2 ]

2 голосов
/ 10 октября 2019

Для недействительных методов сначала нужно заблокировать действие.

Mockito.doAnswer(invocation -> {
  // grab args and remove from cart
})
.when(cartService)  // mocked cartService
.removeItem(cart, rowKey, messages);  // You can use argumentMatchers here
1 голос
/ 10 октября 2019

Для использования функции void doAnswer

@Test
public void testRemoveCartItem() throws UnexpectedException {
    Cart cart = getCart();
    int rowKey = 0;
    JsonMessages messages = new JsonMessages()();

    //given
    given(cartService.getById(cart.getId())).willReturn(cart);

    doAnswer(new Answer<Void>() {
        @Override
        public void answer(InvocationOnMock invocation) throws Throwable {
            //get the arguments passed to mock
            Object[] args = invocation.getArguments();

            //get the mock 
            Object mock = invocation.getMock(); 

            Cart c = (Cart)args[0];
            int row = (int)(Integer)args[1];

            c.removeItem(row); //Just an assumption here

            //return
            return null;
        }
    })
    .when(cartService).removeItem(cart, rowKey, messages);

    //When
    CartResponse cartResponse = mobileAppCartHandler.processDeleteCartEntry(cart.getId(), rowKey, messages);

    //Then
    assertNotNull(cartResponse);
    assertEquals(ResponseStatus.OK, cartResponse.getStatus());
    assertEquals(1, cartResponse.getEntries().size());

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...