Weryfikacja wywołań metod na Mockach

W celu zweryfikowania czy metoda została wywołana, ile razy a może nie została wywołana możemy posłużyć się metodą „verify”. Przyjmuje ona jako parametr mocka. Następnie podajemy metodą której wywołanie chcemy sprawdzić. np.: w poniższym teście sprawdzamy czy metoda „sendTo Prepare” zdefiniowana w interfejsie CartHandler została wywołana.

verify(cartHandler).sendToPrepare(cart);

Metoda verify ma kilka odsłon:

  • verify(cartHandler, times(2)).sendToPrepare(cart); – sprawdzamy czy metoda zostal wywołana 2 razy.
  • verify(cartHandler, atLeastOnce()).sendToPrepare(cart); – czy metoda została wywołana przynajmniej raz.
  • verify(cartHandler, atMost()).sendToPrepare(cart); – maksymalna ilość wywoływań metody.
  • verifyNoMoreInteractions(cartHandler); – sprawdza czy nie ma już więcej interakcji z mockiem, czy dany mock nie jest już wywoływany.
  • veriifyNoInteraction(cartHandler); – sprawdza czy nie ma ani jednej interakcji z mockiem.
  • verify(cartHandler, never()).sendToPrepare(cart); – sprawdzenie tego iż metoda nie powinna ani razu się wołać.

Również za pomocą metody verify możemy sprawdzić kolejność wywołań określonych metod. Wykonujemy to za pomocą obiektu inOrder. Proszę spójrz na przykład poniżej:

InOrder inOrder = inOrder(cartHandler); 
inOrder.verify(cartHandler).canHandleCart(cart); 
inOrder.verify(cartHandlerCart).sendToPrepare(cart); 
i sprawdzamy czy metody są wywoływane właśnie w tej kolejności canHandleCart i sendToPrepare.  

Warto wiedzieć że do zapisu verify(cartHandler).sendToPrepare(cart); istnieje odpowiednik zgodny z bdd: then(cartHandler).should().sendToPrepare(cart); Również metoda verify(cartHandler, never()).sendToPrepare(cart); ma swojego odpowiednika zgodnego z bdd: then(cartHandler).should(never()).sentToPrepare(cart);

Kolejną ważną informacją jest fakt że metody verify możemy łączyć z asercjami. NP.: możemy sprawdzić w jednym teście czy metoda jest wywołana przynajmniej raz oraz czy status przyjętego zamówienia do realizacji zmienił się na PREPARING.

@Test
void processCartShouldSendToPrepare() {
      //given
Order order = new Order();
Cart cart = new Cart();
cart.addOrderToCart(order);
given(cartHandler.canHandleCart(cart)).willReturn(true);
      //when
Cart resultCart = cartService.processCart(cart);
      //then
verify(cartHandler, atLeastOnce()).sendToPrepare(cart);
String.valueOf(resultCart.getOrders().get(0).getOrderStatus()), equalTo(OrderStatus.PREPARING))

Podsumowując warto zapamiętać możliwości metody verify ponieważ dzieki niej jestesmy w stanie lepiej przetestować naszego mocka.

Leave a Comment

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *