Archiwa kategorii: Testy

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.

Awaitility – łatwiejsze testy asynchronicznego kodu?

Niedawno opisywałem testowanie asynchronicznego kodu przy wykorzystaniu Mockito. Jeden z naszych Czytelników zwrócił jednak uwagę na to, że istnieją gotowe narzędzia zbudowane po to, by w takich sytuacjach pomagać. Jednym z nich jest Awaitility – mała, ale dość intensywnie rozwijana biblioteka mająca za zadanie uproszenie pisania testów jednostkowych kodu wielowątkowego. Jak spisuje się w praktyce? Na to postaram się odpowiedzieć.

Czytaj dalej

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