Archiwa tagu: mockito

Mockito – „łapiemy” argumenty wywołania metod

Temat Mockito był już na tym blogu poruszany kilkakrotnie (np. TU i TU). Opisywałem jak można wykorzystać to narzędzie do mockowania oraz weryfikacji wywołania metod. W tym drugim przypadku często zachodzi także konieczność wykonania dodatkowych asercji na argumencie weryfikowanej metody. Aby upewnić się, że program działa poprawnie, oprócz samego faktu wykonania metody sprawdzamy, czy jej argumenty mają poprawne wartości pól. Pomocna w takiej sytuacji jest klasa ArgumentCaptor będąca częścią Mockito. Poniżej znajdziecie przykładowy test, który z niej korzysta.
 

public class SampleTest
{
  private Canvas canvas;
  private CanvasPainter painter;

  @Before
  public void setUp() throws Exception
  {
    canvas = mock(Canvas.class);
    painter = new CanvasPainter(canvas);
  }

  @Test
  public void testDraw() throws Exception
  {
    Point point = new Point(1, 2);
    painter.addPoint(point);

    painter.draw();

    ArgumentCaptor captor = ArgumentCaptor.forClass(Point.class);
    verify(canvas, times(1)).draw(captor.capture());

    Point captured = captor.getValue();
    assertThat(captured.getX(), is(1D));
    assertThat(captured.getY(), is(2D));
  }
}

 
Kod jest chyba na tyle prosty, że nie wymaga dłuższego komentarza. Sprawdzamy w nim, czy wykonanie metody draw() klasy CanvasPainter powoduje wykonanie metody draw() klasy Canvas dla każdego punktu, który został dodany przy pomocy metody addPoint(). Prócz samego wywołania chcemy też sprawdzić, że przekazany do metody draw() klasy Canvas obiekt ma odpowiednie wartości pól x i y.

PowerMock – pomoc w testach jednostkowych

Na łamach bloga opisane były wielokrotnie różne narzędzia testowe. Mi szczególnie odpowiada połączenie JUnit + Mockito. Duet ten ma jednak kilka braków – nie ma możliwości mockowania i weryfikacji metod statycznych, prywatnych, czy konstruktorów. Skutkiem tych ograniczeń jest niejednokrotnie poświęcanie spójnej architektury aplikacji na rzecz testów jednostkowych. Za przykład niech posłuży zmiana metod prywatnych na package-private tylko po to, by móc na potrzeby testów zmienić ich zachowanie. Jest jednak dużo prostsze wyjście – można użyć biblioteki PowerMock i nigdy więcej nie mieć tego typu zmartwień.

Czytaj dalej

Mockito – testowanie asynchronicznych wywołań

W jednym z poprzednich artykułów opisywałem podstawy korzystania z jednego z najpopularniejszych frameworków służących do mockowania – Mockito. Poruszyłem w nim najważniejsze i najpopularniejsze kwestie, jakie wiążą się z tym tematem. Dziś natomiast chciałbym wspomnieć o problemie, z którym spotkać można się dość często. Mowa o testowaniu asynchronicznych wywołań, i o tym jak Mockito może nam w tym pomóc. Zapraszam do dalszej lektury.

Czytaj dalej

Mockito, czyli testy z procentami

Podczas pisania testów jednostkowych naszej aplikacji bardzo często wymagane jest mockowanie (lub stubowanie) klas, czyli najogólniej mówiąc tworzenie obiektów tych klas z częściowo zmienionym zachowaniem. Wszystko to po to, aby dało się przeprowadzić test w całkowicie kontrolowanych i znanych warunkach, co jest niezbędne do określenia poprawności działania sprawdzanej funkcjonalności. Można oczywiście próbować dziedziczyć po wybranej klasie i przeciążać interesujące nas metody, ale w większości przypadków łatwiej i szybciej jest użyć jednego z gotowych frameworków przeznaczonych właśnie do tego celu. Narzędziem takim jest Mockito, o którym chciałbym napisać kilka słów.

Czytaj dalej