Ostatnim razem napisałem, dlaczego warto pisać testy. Tym razem przyszła pora, aby napisać pierwszy test. Istnieje kilka popularnych narzędzi do testów takich jak NUnit, XUnit itp. Rozważania nad wyższością jednego rozwiązania nad drugim zostawmy architektom i osobom lubiącym marnować swój czas. Testy jednostkowe są na tyle ważne i często stosowane, że Microsoft stworzył własne narzędzie do testów i wrzucił je do Visual Studio. Skorzystamy zatem z dobroci producenta i wykorzystamy MSTest.

W pierwszej kolejności trzeba utworzyć nowy projekt naszej aplikacji. Najprościej będzie stworzyć aplikację konsolową (idziemy po linii najmniejszego oporu, a co!). Dodajemy nową klasę z naszą metodą, którą będziemy sprawdzać testami. Ja wziąłem przykład z poprzedniego wpisu, czyli pakowanie butelek z wodą na wózek w supermarkecie, który pomieści max. 20 butelek.

public class MojaKlasa
{
    public int WozkiNaWode(int iloscButelek)
    {
        return 0;
    }
}

Skoro mamy klasę i metodę, należy napisać do niej test. W tym celu w Solution Explorer klikamy prawym przyciskiem na Solution i wybieramy odpowiednio Add -> New Project.

newproject

 

W oknie, które nam się pojawiło, wyszukujemy na drzewku z grupami projektów Test i spośród listy projektów klikamy na Unit Test Project, podajemy nazwę i wybieramy OK.

Po tej operacji zostanie wygenerowany nowy projekt, a w nim klasa z pustą metodą testową. Możemy ją potraktować jako ściągawkę, aby zobaczyć jaką bibliotekę należy wczytać, oraz jakie atrybuty nadać klasie i metodzie.

W projekcie testowym tworzymy nową klasę, w której zgromadzimy wszystkie metody testujące nasz algorytm. Najlepiej nadać jej nazwę taką samą jak ma testowana metoda, dzięki temu łatwiej będzie się odnaleźć.

public class WozkiNaWode_test
{
}

addreferences

Musimy jeszcze dodać referencję do aplikacji, aby projekt testowy ją widział. W Solution Explorer klikamy prawym przyciskiem na References i wybieramy Add Reference. W oknie, które się pojawiło klikamy z lewej strony na Projects -> Solution, zaznaczamy projekt naszej aplikacji i zatwierdzamy wszystko przyciskiem OK.

addreferences2

Wracamy do klasy testowej. Dodajemy jej dwa usingi, jeden do biblioteki Microsoftu do testów jednostkowych, a drugą do naszej aplikacji:

using Microsoft.VisualStudio.TestTools.UnitTesting;
using MojaAplikacja;

Teraz nad klasą dodajemy atrybut:

[TestClass]
public class WozkiNaWode_test

…i możemy w końcu napisać test! Na pierwszy ogień przetestujemy czy dobrze jest obliczany pusty wózek:

public void PustyWozek()
{
    //arrange
    MojaKlasa klasa = new MojaKlasa();

    //act
    int wynik = klasa.WozkiNaWode(0);

    //assert
    Assert.AreEqual(0, wynik);
}

Klikamy prawym przyciskiem myszy na nazwę metody i klikamy Run Test. Czekamy chwilkę… i mamy wynik naszego testu. Super, test przeszedł!

W skrócie wytłumaczę, co się w naszej metodzie znajduje.

Po pierwsze jest podzielona na trzy części:

  • arrange – dane wejściowe, czyli tworzymy wszystkie potrzebne obiekty,
  • act – działanie, czyli wykonujemy naszą metodę,
  • assert – sprawdzanie, czyli upewniamy się, czy wartości są zgodne z oczekiwanymi.

Taki podział daje nam porządek i dzięki temu nie pogubimy się w tym, co napisaliśmy. Metoda Assert.AreEqual służy do sprawdzenia, czy wartość, którą ustaliliśmy, jako poprawną jest zgodna z wynikiem. O pozostałych metodach klasy Assert napiszę innym razem, AreEqual w większości przypadków wystarczy.

Skoro mamy test i wiemy, jak on działa, to warto napisać kolejny. Sprawdźmy więc, czy załadowując wózek do pełna, otrzymamy jeden wózek.

public void PelnyWozek()
{
    //arrange
    MojaKlasa klasa = new MojaKlasa();

    //act
    int wynik = klasa.WozkiNaWode(20);

    //assert
    Assert.AreEqual(1, wynik);
}

Po napisaniu testu klikamy prawym przyciskiem na nazwę klasy i wybieramy Run Test. Oj, test nam nie przeszedł.

testexplorer

 

Nie pozostaje nam nic innego jak dopisać testy dla wszystkich skrajnych przypadków i napisać metodę tak, aby te testy przeszła poprawnie.

Dołącz do newslettera już dziś!
Zero spamu - tylko wartościowe treści!
Musisz już lecieć?
Zostaw swój adres e-mail i dołącz do BEZPŁATNYCH WEBINARÓW dotyczących SQLa!
  • „Jak uczyć się SQLa?” – 4 października
  • „SQL dla testerów” – 12 października