fbpx

Testy integracyjne

Ten wpis jest kontynuacją serii dotyczącej różnych poziomów testów. Przed przystąpieniem do czytania zachęcam Cię do zapoznania się z poprzednim postem o testach jednostkowych. W tym wpisie postaram się przybliżyć testy integracyjne.

Aplikacja

Spróbujemy rozbudować naszą aplikację. Nie będzie to już zwykły kalkulator, a aplikacja która liczy ile wybranej waluty możemy otrzymać, gdy posiadamy konkretną ilość polskich złotych. Aby tego dokonać będziemy korzystali z zewnętrznego serwisu, aby pobrać aktualny kurs wymiany danej waluty oraz z metody kalkulatora którą przetestowaliśmy w ramach testów jednostkowych.

Testowana metoda

Nasza metoda posiada dwa parametry. Pierwszy to ilość złotówek jakie chcemy przeliczyć, a drugi to nazwa waluty którą chcemy otrzymać. Wewnątrz metody tworzymy nowy obiekt klasy Calculator, który posłuży nam do operacji wyliczania ilości waluty którą otrzymamy.Widzimy tutaj, że nasza metoda korzysta z dwóch klas, które możemy traktować jako jednostki. Udało nam się napisać nawet testy jednostkowe dla metody div i mamy pewność, że ta metoda działa poprawnie. Nasza metoda integruje dwie jednostki ze sobą.

public class ExchangeCalculator {

     public int calculate (int amount, String currencyName) {
         Calculator calculator = new Calculator();
         ExchangeService exchange = ExchangeService();
         float rate = exchange.getRate(currencyName);
         return calculator.div(amount,rate)
    }
 // inne metody
 }

Pierwszy test

W naszych testach będziemy sprawdzali czy metoda calculate() działa poprawnie. Spróbujemy kilkukrotnie ją wywołać dla różnych wartości liczbowych i zobaczymy czy metoda zachowa się tak jak tego oczekujemy.
Nasz test weryfikuje działanie większego fragmentu kodu. Sprawdzamy tutaj czy pojedyncze jednostki (kalkulator i serwis z kursami walut) będą w stanie poprawnie zadziałać gdy zaczniemy do nich przekazywać różne wartości.

@Test
 public void divTest() {
    ExchangeCalculator calculator = new ExchangeCalculator();
    Assert.assertEquals(calculator.calculate(1000f,USD),250);
 }

Pierwsza linijka wewnątrz metody to stworzenie klasy kalkulatora walut w której znajduje się metoda, którą chcemy testować. Druga linika to sprawdzenie (asercja) czy wynik metody calculate(1000f,USD) jest równy 250. Po uruchomieniu test kończy się sukcesem. Metoda działa dla powyższych danych testowych.

Drugi test

Kolejny test przeprowadzimy dla waluty, która nie istnieje. Spróbujemy zweryfikować działanie metody calculate() dla wartości 1000, „Dummy”.
Oczekiwany rezultat to 0. Test dla przedstawionych wartości może wyglądać następująco:

@Test
 public void divTest() {
   ExchangeCalculator calculator = new ExchangeCalculator();
   Assert.assertEquals(calculator.calculate(1000f,"Dummy"),0);
 }

Dla powyższych danych testowych dostaniemy wyjątek. Nasz program został przerwany. Odkryliśmy błąd w Naszym programie i teraz możemy zastanowić się z czego on wynika. Po przeanalizowniu metody getRate widzimy, że zgodnie z dokumentacja NBP z którego pobieramy przelicznik waluty, powinien zwracać on błąd dla nazw walut które są niepoprawne. Możemy spróbować obsłużyć ten wyjątek wewnątrz metody calculate() i zwracać wartośc zero gdy nazwa waluty nie bedzie poprawna

public class ExchangeCalculator {

 public int calculate (int amount, String currencyName) {
   Calculator calculator = new Calculator();
   float rate = 0f;

   try{
     ExchangeService exchange = ExchangeService();
     float rate = exchange.getRate(currencyName);
   }catch(UnknownCurrency ex) {
     ex.printStacktrace()
   }

   return calculator.div(amount,rate)
 }
 // inne metody
 }

Teraz poniższy test powinien zakończyć się sukcesem:

@Test
 public void divTest() {
   ExchangeCalculator calculator = new ExchangeCalculator();
   Assert.assertEquals(calculator.calculate(1000f,"Dummy"),0);
 }

Podsumowanie

W tym wpisie na prostym przykładzie przedstawiłem ideę testów integracyjnych. Jako przykład podałem próbę integracji kodu kalkulatora z serwisem kursów walut. Oczywiście możemy też testować inne integracje np. z bazą danych. Taką integrację moglibyśmy testować, gdyby nasz kalkulator zapisywal wyniki do bazy danych

Warto zapamiętać ten przykład, aby w łatwy sposób wytłumaczyć czym są testy integracyjne podczas rozmowy rekrutacyjnej.

5 1 vote
Article Rating
Subscribe
Powiadom o
guest
0 komentarzy
Inline Feedbacks
View all comments