{"id":682,"date":"2021-10-29T09:52:03","date_gmt":"2021-10-29T09:52:03","guid":{"rendered":"https:\/\/testeroprogramowania.pl\/?p=682"},"modified":"2021-10-29T09:52:05","modified_gmt":"2021-10-29T09:52:05","slug":"testy-integracyjne","status":"publish","type":"post","link":"https:\/\/testeroprogramowania.pl\/index.php\/2021\/10\/29\/testy-integracyjne\/","title":{"rendered":"Testy integracyjne"},"content":{"rendered":"\n<p style=\"text-align:left\">Ten wpis jest kontynuacj\u0105  serii dotycz\u0105cej r\u00f3\u017cnych poziom\u00f3w test\u00f3w.  Przed przyst\u0105pieniem do czytania zach\u0119cam Ci\u0119 do zapoznania si\u0119 z poprzednim postem o <a href=\"https:\/\/testeroprogramowania.pl\/index.php\/2021\/04\/11\/testy-jednostkowe\/\">testach jednostkowych<\/a>. W tym wpisie postaram si\u0119 przybli\u017cy\u0107 testy integracyjne.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"680\" src=\"https:\/\/testeroprogramowania.pl\/wp-content\/uploads\/2021\/10\/digitization-6497133_1280-1024x680.jpg\" alt=\"\" class=\"wp-image-683\" srcset=\"https:\/\/testeroprogramowania.pl\/wp-content\/uploads\/2021\/10\/digitization-6497133_1280-1024x680.jpg 1024w, https:\/\/testeroprogramowania.pl\/wp-content\/uploads\/2021\/10\/digitization-6497133_1280-300x199.jpg 300w, https:\/\/testeroprogramowania.pl\/wp-content\/uploads\/2021\/10\/digitization-6497133_1280-768x510.jpg 768w, https:\/\/testeroprogramowania.pl\/wp-content\/uploads\/2021\/10\/digitization-6497133_1280.jpg 1280w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Aplikacja <\/h2>\n\n\n\n<p style=\"text-align:left\">Spr\u00f3bujemy rozbudowa\u0107 nasz\u0105 aplikacj\u0119. Nie b\u0119dzie to ju\u017c zwyk\u0142y kalkulator, a aplikacja kt\u00f3ra liczy ile wybranej waluty mo\u017cemy otrzyma\u0107, gdy posiadamy konkretn\u0105 ilo\u015b\u0107 polskich z\u0142otych. Aby tego dokona\u0107 b\u0119dziemy korzystali z zewn\u0119trznego serwisu, aby pobra\u0107 aktualny kurs wymiany danej waluty oraz z metody kalkulatora kt\u00f3r\u0105 przetestowali\u015bmy w ramach test\u00f3w jednostkowych. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Testowana metoda<\/h2>\n\n\n\n<p style=\"text-align:left\">Nasza metoda posiada dwa parametry. Pierwszy to ilo\u015b\u0107 z\u0142ot\u00f3wek jakie chcemy przeliczy\u0107, a drugi to nazwa waluty kt\u00f3r\u0105 chcemy otrzyma\u0107. Wewn\u0105trz metody tworzymy nowy obiekt klasy Calculator, kt\u00f3ry pos\u0142u\u017cy nam do operacji wyliczania ilo\u015bci waluty kt\u00f3r\u0105 otrzymamy.Widzimy tutaj, \u017ce nasza metoda korzysta z dw\u00f3ch klas, kt\u00f3re mo\u017cemy traktowa\u0107 jako jednostki. Uda\u0142o nam si\u0119 napisa\u0107 nawet testy jednostkowe dla metody div i mamy pewno\u015b\u0107, \u017ce ta metoda dzia\u0142a poprawnie. Nasza metoda integruje dwie jednostki ze sob\u0105.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">public class ExchangeCalculator {\n\n     public int calculate (int amount, String currencyName) {\n         Calculator calculator = new Calculator();\n         ExchangeService exchange = ExchangeService();\n         float rate = exchange.getRate(currencyName);\n         return calculator.div(amount,rate)\n    }\n \/\/ inne metody\n }<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Pierwszy test<\/h2>\n\n\n\n<p style=\"text-align:left\">W naszych testach b\u0119dziemy sprawdzali czy metoda calculate() dzia\u0142a poprawnie. Spr\u00f3bujemy kilkukrotnie j\u0105 wywo\u0142a\u0107 dla r\u00f3\u017cnych warto\u015bci liczbowych i zobaczymy czy metoda zachowa si\u0119 tak jak tego oczekujemy.<br>Nasz test weryfikuje  dzia\u0142anie wi\u0119kszego fragmentu kodu. Sprawdzamy tutaj czy pojedyncze jednostki (kalkulator i serwis z kursami walut) b\u0119d\u0105 w stanie poprawnie zadzia\u0142a\u0107 gdy zaczniemy do nich przekazywa\u0107 r\u00f3\u017cne warto\u015bci.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">@Test\n public void divTest() {\n    ExchangeCalculator calculator = new ExchangeCalculator();\n    Assert.assertEquals(calculator.calculate(1000f,USD),250);\n }<\/pre>\n\n\n\n<p style=\"text-align:left\">Pierwsza linijka wewn\u0105trz metody to stworzenie klasy kalkulatora walut w kt\u00f3rej znajduje si\u0119 metoda, kt\u00f3r\u0105 chcemy testowa\u0107. Druga linika to sprawdzenie (asercja) czy wynik metody calculate(1000f,USD) jest r\u00f3wny 250. Po uruchomieniu test ko\u0144czy si\u0119 sukcesem. Metoda dzia\u0142a dla powy\u017cszych danych testowych.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Drugi test<\/h2>\n\n\n\n<p>Kolejny test przeprowadzimy dla waluty, kt\u00f3ra nie istnieje. Spr\u00f3bujemy zweryfikowa\u0107 dzia\u0142anie metody calculate() dla warto\u015bci 1000, &#8222;Dummy&#8221;.<br>Oczekiwany rezultat to 0. Test dla przedstawionych warto\u015bci mo\u017ce wygl\u0105da\u0107 nast\u0119puj\u0105co:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">@Test\n public void divTest() {\n   ExchangeCalculator calculator = new ExchangeCalculator();\n   Assert.assertEquals(calculator.calculate(1000f,\"Dummy\"),0);\n }\n<\/pre>\n\n\n\n<p>Dla powy\u017cszych danych testowych dostaniemy wyj\u0105tek. Nasz program zosta\u0142 przerwany. Odkryli\u015bmy b\u0142\u0105d w Naszym programie i teraz mo\u017cemy zastanowi\u0107 si\u0119 z czego on wynika. Po przeanalizowniu metody getRate widzimy, \u017ce zgodnie z dokumentacja NBP z kt\u00f3rego pobieramy przelicznik waluty, powinien zwraca\u0107 on b\u0142\u0105d dla nazw walut kt\u00f3re s\u0105 niepoprawne. Mo\u017cemy spr\u00f3bowa\u0107 obs\u0142u\u017cy\u0107 ten wyj\u0105tek wewn\u0105trz metody calculate() i zwraca\u0107 warto\u015bc zero gdy nazwa waluty nie bedzie poprawna<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">public class ExchangeCalculator {\n\n public int calculate (int amount, String currencyName) {\n   Calculator calculator = new Calculator();\n   float rate = 0f;\n\n   try{\n     ExchangeService exchange = ExchangeService();\n     float rate = exchange.getRate(currencyName);\n   }catch(UnknownCurrency ex) {\n     ex.printStacktrace()\n   }\n\n   return calculator.div(amount,rate)\n }\n \/\/ inne metody\n }<\/pre>\n\n\n\n<p>Teraz poni\u017cszy test powinien zako\u0144czy\u0107 si\u0119 sukcesem:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">@Test\n public void divTest() {\n   ExchangeCalculator calculator = new ExchangeCalculator();\n   Assert.assertEquals(calculator.calculate(1000f,\"Dummy\"),0);\n }<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Podsumowanie<\/h2>\n\n\n\n<p style=\"text-align:left\">W tym wpisie na prostym przyk\u0142adzie przedstawi\u0142em ide\u0119 test\u00f3w integracyjnych. Jako przyk\u0142ad poda\u0142em pr\u00f3b\u0119 integracji kodu kalkulatora z serwisem kurs\u00f3w walut. Oczywi\u015bcie mo\u017cemy te\u017c testowa\u0107 inne integracje np. z baz\u0105 danych. Tak\u0105 integracj\u0119 mogliby\u015bmy testowa\u0107, gdyby nasz kalkulator zapisywal wyniki do bazy danych <\/p>\n\n\n\n<p>Warto zapami\u0119ta\u0107 ten przyk\u0142ad, aby w \u0142atwy spos\u00f3b wyt\u0142umaczy\u0107 czym s\u0105 testy integracyjne podczas rozmowy rekrutacyjnej.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ten wpis jest kontynuacj\u0105 serii dotycz\u0105cej r\u00f3\u017cnych poziom\u00f3w test\u00f3w. Przed przyst\u0105pieniem do czytania zach\u0119cam Ci\u0119 do zapoznania si\u0119 z poprzednim postem o testach jednostkowych. W tym wpisie postaram si\u0119 przybli\u017cy\u0107 testy integracyjne. Aplikacja Spr\u00f3bujemy rozbudowa\u0107 nasz\u0105 aplikacj\u0119. Nie b\u0119dzie to ju\u017c zwyk\u0142y kalkulator, a aplikacja kt\u00f3ra liczy ile wybranej waluty [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":683,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-682","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/testeroprogramowania.pl\/index.php\/wp-json\/wp\/v2\/posts\/682","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/testeroprogramowania.pl\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/testeroprogramowania.pl\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/testeroprogramowania.pl\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/testeroprogramowania.pl\/index.php\/wp-json\/wp\/v2\/comments?post=682"}],"version-history":[{"count":4,"href":"https:\/\/testeroprogramowania.pl\/index.php\/wp-json\/wp\/v2\/posts\/682\/revisions"}],"predecessor-version":[{"id":687,"href":"https:\/\/testeroprogramowania.pl\/index.php\/wp-json\/wp\/v2\/posts\/682\/revisions\/687"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/testeroprogramowania.pl\/index.php\/wp-json\/wp\/v2\/media\/683"}],"wp:attachment":[{"href":"https:\/\/testeroprogramowania.pl\/index.php\/wp-json\/wp\/v2\/media?parent=682"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/testeroprogramowania.pl\/index.php\/wp-json\/wp\/v2\/categories?post=682"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/testeroprogramowania.pl\/index.php\/wp-json\/wp\/v2\/tags?post=682"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}