Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00399 008664 10487744 na godz. na dobę w sumie
JUnit. Pragmatyczne testy jednostkowe w Javie - książka
JUnit. Pragmatyczne testy jednostkowe w Javie - książka
Autor: , Liczba stron: 192
Wydawca: Helion Język publikacji: polski
ISBN: 83-246-0406-5 Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> programowanie >> java - programowanie
Porównaj ceny (książka, ebook, audiobook).

Przetestuj swoje aplikacje podczas ich tworzenia

Testy jednostkowe są niezwykle ważnym narzędziem programisty. Przeprowadzane podczas pisania aplikacji pozwalają na sprawdzenie poprawności kodu, wyłapanie błędów i szybkie usunięcie ich. W nowoczesnych metodykach wytwarzania oprogramowania testy jednostkowe są jednymi z najważniejszych elementów procesu. Tworzenie systemów bez korzystania z testów jednostkowych często porównywane jest do pisania programów na kartce. Nowoczesne narzędzia takie, jak JUnit bardzo ułatwiają przeprowadzanie testów jednostkowych, integrując się ze środowiskami programistycznymi.

Książka 'JUnit. Pragmatyczne testy jednostkowe w Javie' to wprowadzenie do tematyki testów jednostkowych. Czytając ją poznasz ich znaczenie i nauczysz się stosować JUnit do projektowania i wykorzystywania testów. Dowiesz się, jak projektować testy jednostkowe w oparciu JUnit, co testować za ich pomocą i gdzie umieszczać kod testowy. W książce przeczytasz też o zasadach projektowania łatwego do testowania kodu oraz programowaniu sterowanym testami.

Przekonaj się, jak bardzo testy jednostkowe ułatwią Ci pracę.

Znajdź podobne książki Ostatnio czytane w tej kategorii

Darmowy fragment publikacji:

IDZ DO IDZ DO PRZYK£ADOWY ROZDZIA£ PRZYK£ADOWY ROZDZIA£ SPIS TREŒCI SPIS TREŒCI KATALOG KSI¥¯EK KATALOG KSI¥¯EK KATALOG ONLINE KATALOG ONLINE ZAMÓW DRUKOWANY KATALOG ZAMÓW DRUKOWANY KATALOG TWÓJ KOSZYK TWÓJ KOSZYK DODAJ DO KOSZYKA DODAJ DO KOSZYKA CENNIK I INFORMACJE CENNIK I INFORMACJE ZAMÓW INFORMACJE ZAMÓW INFORMACJE O NOWOŒCIACH O NOWOŒCIACH ZAMÓW CENNIK ZAMÓW CENNIK CZYTELNIA CZYTELNIA FRAGMENTY KSI¥¯EK ONLINE FRAGMENTY KSI¥¯EK ONLINE Wydawnictwo Helion ul. Chopina 6 44-100 Gliwice tel. (32)230-98-63 e-mail: helion@helion.pl JUnit. Pragmatyczne testy jednostkowe w Javie Autorzy: Andy Hunt, Dave Thomas T³umaczenie: Jaromir Senczyk ISBN: 83-246-0406-5 Tytu³ orygina³u: Pragmatic Unit Testing in Java with JUnit Format: B5, stron: 192 Przetestuj swoje aplikacje podczas ich tworzenia (cid:127) Poznaj strukturê testów jednostkowych (cid:129) Stwórz poprawne testy jednostkowe (cid:129) Wykorzystaj modu³y testowe w projekcie Testy jednostkowe s¹ niezwykle wa¿nym narzêdziem programisty. Przeprowadzane podczas pisania aplikacji pozwalaj¹ na sprawdzenie poprawnoœci kodu, wy³apanie b³êdów i szybkie usuniêcie ich. W nowoczesnych metodykach wytwarzania oprogramowania testy jednostkowe s¹ jednymi z najwa¿niejszych elementów procesu. Tworzenie systemów bez korzystania z testów jednostkowych czêsto porównywane jest do pisania programów na kartce. Nowoczesne narzêdzia takie, jak JUnit bardzo u³atwiaj¹ przeprowadzanie testów jednostkowych, integruj¹c siê ze œrodowiskami programistycznymi. Ksi¹¿ka „JUnit. Pragmatyczne testy jednostkowe w Javie” to wprowadzenie do tematyki testów jednostkowych. Czytaj¹c j¹ poznasz ich znaczenie i nauczysz siê stosowaæ JUnit do projektowania i wykorzystywania testów. Dowiesz siê, jak projektowaæ testy jednostkowe w oparciu JUnit, co testowaæ za ich pomoc¹ i gdzie umieszczaæ kod testowy. W ksi¹¿ce przeczytasz te¿ o zasadach projektowania ³atwego do testowania kodu oraz programowaniu sterowanym testami. (cid:129) Cele przeprowadzania testów jednostkowych (cid:129) Planowanie testów (cid:129) Implementacja testów z wykorzystaniem JUnit (cid:129) Zasady stosowania testów (cid:129) Automatyzowanie testów (cid:129) Okreœlanie czêstotliwoœci testowania (cid:129) Projektowanie kodu pod k¹tem testowania Przekonaj siê, jak bardzo testy jednostkowe u³atwi¹ Ci pracê Przedmowa ..............................................................................................7 Rozdział 1. Wprowadzenie ..................................................................11 Zaufanie do tworzonego kodu .......................................................................... 12 Na czym polegają testy jednostkowe? ................................................................ 13 Po co zajmować się testami jednostkowymi? ...................................................... 14 Co chcemy osiągnąć? ....................................................................................... 15 Jak testować? ................................................................................................... 17 Wymówki od testowania .................................................................................. 18 Zawartość książki ............................................................................................ 23 Rozdział 2. Najprostsze testy jednostkowe ......................................25 Planowanie testów ........................................................................................... 26 Testowanie prostej metody ............................................................................... 28 Więcej testów .................................................................................................. 33 Rozdział 3. Implementacja testów JUnit ..........................................35 Struktura testów jednostkowych ........................................................................ 35 Asercje JUnit .................................................................................................. 37 Szkielet JUnit ................................................................................................. 40 4 JUnit. Pragmatyczne testy jednostkowe w Javie Kompozycja testów JUnit ................................................................................ 42 Niestandardowe asercje JUnit .......................................................................... 47 JUnit i wyjątki ................................................................................................. 49 Jeszcze o nazwach ............................................................................................ 51 Szkielet JUnit ................................................................................................. 52 Rozdział 4. Co testować? .....................................................................53 Czy wyniki są poprawne? ................................................................................. 54 Warunki brzegowe ........................................................................................... 57 Sprawdzanie relacji zachodzących w odwrotnym kierunku .................................. 59 Kontrola wyników na wiele sposobów ............................................................... 60 Wymuszanie warunków powstawania błędów .................................................... 61 Charakterystyka efektywnościowa ..................................................................... 61 Rozdział 5. Warunki brzegowe ...........................................................65 Zgodność ....................................................................................................... 66 Uporządkowanie ............................................................................................. 68 Zakres ............................................................................................................ 69 Referencja ...................................................................................................... 73 Istnienie .......................................................................................................... 74 Liczność ......................................................................................................... 75 Czas ............................................................................................................... 78 Zrób to sam .................................................................................................... 79 Rozdział 6. Stosowanie obiektów imitacji ........................................85 Proste namiastki .............................................................................................. 86 Obiekty imitacji ............................................................................................... 87 Testowanie serwletu ........................................................................................ 92 Easy Mock ..................................................................................................... 96 Rozdział 7. Właściwości poprawnych testów jednostkowych ....101 Automatyzacja .............................................................................................. 102 Kompletność ................................................................................................. 103 Powtarzalność ............................................................................................... 105 Spis treści 5 Niezależność ................................................................................................. 106 Profesjonalizm .............................................................................................. 107 Testowanie testów ......................................................................................... 109 Rozdział 8. Projekt i testowanie ......................................................113 Gdzie umieścić kod testowy ............................................................................ 113 Testowanie i kurtuazja ................................................................................... 117 Częstotliwość testów ...................................................................................... 119 Testy i istniejący kod ..................................................................................... 120 Testy i recenzje ............................................................................................. 123 Rozdział 9. Zagadnienia projektowania ..........................................127 Projektowanie łatwo testowalnego kodu .......................................................... 128 Refaktoring i testowanie ................................................................................. 130 Testowanie niezmienników klas ...................................................................... 143 Projektowanie sterowane testami .................................................................... 145 Testowanie poprawności parametrów ............................................................. 147 Dodatek A Pułapki .............................................................................149 Dopóki kod działa ......................................................................................... 149 „Test ognia” ................................................................................................. 150 „Działa na mojej maszynie” ........................................................................... 150 Problemy arytmetyki zmiennoprzecinkowej ...................................................... 151 Testy zajmują zbyt wiele czasu ....................................................................... 152 Testy ciągle zawodzą ..................................................................................... 152 Testy zawodzą na niektórych maszynach ......................................................... 153 Metoda main nie jest wykonywana .................................................................. 153 Dodatek B Instalacja JUnit ...............................................................155 Instalacja z wiersza poleceń ............................................................................ 156 Czy JUnit działa? .......................................................................................... 157 Dodatek C Szkielet testów JUnit .....................................................159 Klasa pomocnicza ......................................................................................... 161 Podstawowy szablon ...................................................................................... 163 6 JUnit. Pragmatyczne testy jednostkowe w Javie Dodatek D Zasoby ...............................................................................165 W internecie ................................................................................................. 165 Bibliografia ................................................................................................... 168 Dodatek E Pragmatyczne testy jednostkowe — podsumowanie ............................................................................169 Dodatek F Rozwiązania ćwiczeń ......................................................173 Skorowidz ............................................................................................185 rudno przewidzieć wszystkie możliwe błędy w działaniu klasy lub metody. Jeśli mamy sporo doświadczenia w tym zakresie, to intuicyj- nie rozpoznajemy miejsca, w których mogą pojawić się kłopoty, i dzię- ki temu koncentrujemy się najpierw na przetestowaniu właśnie tych miejsc. Jednak dla mniej doświadczonych programistów wykrywanie kłopotliwych obszarów często jest frustrującym zadaniem. Tym bardziej że szczególnie łatwo przychodzi ono użytkownikom końcowym, co jest nie tylko irytujące, ale może stanowić także gwóźdź do trumny niejednej kariery programisty. Dlatego niezwykle cenne są wszelkie wskazówki mogące nam wskazać lub choćby przypomnieć obszary, na które szczególnie należy zwrócić uwagę pod- czas testowania. Przyjrzyjmy się zatem sześciu różnym obszarom testowania, których wyko- rzystanie powinno zwiększyć naszą skuteczność w wykrywaniu błędów: t Czy wyniki są poprawne? t Czy warunki brzegowe zostały prawidłowo określone? t Czy można sprawdzić relacje zachodzące w odwrotnym kierunku? t Czy można sprawdzić wyniki, uzyskując je w alternatywny sposób? 54 JUnit. Pragmatyczne testy jednostkowe w Javie t Czy można wymusić warunki zajścia błędu? t Czy charakterystyka efektywnościowa jest poprawna? Czy wyniki są poprawne? Pierwszy, najbardziej oczywisty obszar testowania to sprawdzenie, czy wyniki działania testowanych metod są poprawne. Kontrolę wyników przedstawiliśmy w rozdziale 2. na przykładzie prostej metody zwracającej największy element listy. Testy te są zwykle najłatwiejsze do przeprowadzenia, a wiele spodziewa- nych wyników często określonych jest w specyfikacji wymagań. Jeśli nie, musisz odpowiedzieć sobie na pytanie: Skąd mam wiedzieć, czy kod działa poprawnie? Jeśli znalezienie satysfakcjonującej odpowiedzi na to pytanie nie jest moż- liwe, tworzenie kodu i jego testów może okazać się kompletnym marnotraw- stwem czasu. A co w przypadku, gdy wymagania dopiero się krystalizują? Czy oznacza to, że nie możemy rozpocząć pisania kodu, dopóki wymaga- nia nie zostaną dokładnie sprecyzowane? Nie, wcale nie. Jeśli ostateczne wymaganie nie są jeszcze znane lub kom- pletne, zawsze możesz wymyślić własne wymagania jako punkt odniesienia. Może okazać się, że nie są one poprawne z punktu widzenia użytkownika, ale dzięki nim wiesz, jak powinien według Ciebie działać kod, i potrafisz odpowiedzieć na postawione wcześniej pytanie. Oczywiście musisz potem, wspólnie z użytkownikami, zweryfikować swoje założenia. Definicja poprawności wyników może zmieniać się w trakcie powstawania kodu, ale na każdym etapie jego tworzenia powinieneś móc stwierdzić, czy kod działa tak, jak założyłeś. Rozdział 4. • Co testować? 55 Stosowanie plików zawierających dane testowe W przypadku zestawów testów wymagających dużej ilości danych wejścio- wych można rozważyć ich umieszczenie (być może wraz z oczekiwanymi wynikami) w osobnych plikach wczytywanych przez testy jednostkowe. Implementacja takiego rozwiązania nie jest skomplikowana i niekoniecznie musi od razu wymagać zastosowania języka XML1. Poniżej przedstawio- na została wersja testu TestLargest, która wczytuje wszystkie testy z pliku. import junit.framework.*; import java.io.*; import java.util.ArrayList; import java.util.StringTokenizer; public class TestLargestDataFile extends TestCase { public TestLargestDataFile(String name) { super(name); } /* Wykonuje testy zapisane w pliku testdata.txt (nie testuje * przypadku wyjątku). Wyrzuca wyjątek w przypadku, * gdy któraś operacja wejścia i wyjścia zakończy się błędem. */ public void testFromFile() throws Exception { String line; BufferedReader rdr = new BufferedReader( new FileReader( testdata.txt )); while ((line = rdr.readLine()) != null) { if (line.startsWith( # )) { // Ignoruje komentarz continue; } StringTokenizer st = new StringTokenizer(line); if (!st.hasMoreTokens()) { continue; // Pusty wiersz } // Pobiera spodziewany wynik String val = st.nextToken(); int expected = Integer.valueOf(val).intValue(); 1 To jest oczywiście żart, przecież zastosowanie języka XML jest obligatoryjne we wszystkich współczesnych projektach? 56 JUnit. Pragmatyczne testy jednostkowe w Javie // Oraz argumenty dla testowanej metody ArrayList argument_list = new ArrayList(); while (st.hasMoreTokens()) { argument_list.add(Integer.valueOf( st.nextToken())); } // Zamienia listę obiektów w tablicę typu podstawowego int[] arguments = new int[argument_list.size()]; for (int i=0; i argument_list.size(); i++) { arguments[i] = ((Integer)argument_list. get(i)).intValue(); } // Wykonuje asercję assertEquals(expected, Largest.largest(arguments)); } } } a v a j . e l i F a t a D t s e g r a L t s e T Plik danych testowych ma bardzo prosty format — każdy wiersz zawiera zbiór wartości. Pierwsza z nich jest oczekiwanym wynikiem, a pozostałe ar- gumentami testowanej metody. Dodatkowo zastosowanie znaku # na po- czątku wiersza umożliwia wprowadzanie komentarzy. A oto przykład zawartości takiego pliku: # # Proste testy: # 9 7 8 9 9 9 8 7 9 9 8 9 # # Testy z użyciem wartości ujemnych: # -7 -7 -8 -9 -7 -8 -7 -8 -7 -9 -7 -8 # # Testy mieszane: # 7 -9 -7 -8 7 6 4 9 -1 0 9 -7 4 # # Warunki brzegowe: # 1 1 0 0 2147483647 2147483647 -2147483648 -2147483648 t x t . a t a d t s e t Rozdział 4. • Co testować? 57 W przypadku kilku testów — jak choćby w powyższym przykładzie — wysiłek włożony w opracowanie odpowiedniego rozwiązania nie zwróci się. Jednak w przypadku zaawansowanej aplikacji wymagającej przeprowadze- nia setek takich testów rozwiązanie wykorzystujące pliki danych na pewno warte jest zainteresowania. Należy przy tym pamiętać, że dane testowe — obojętnie, czy umieszczone bezpośrednio w kodzie, czy w pliku danych testowych — same mogą być niepoprawne. Doświadczenie podpowiada nawet, że prawdopodobieństwo tego, iż dane testowe są nieprawidłowe, jest większe niż tego, że testowany kod jest niepoprawny. Zwłaszcza jeśli dane testowe zostały przygotowane drogą ręcznych obliczeń lub uzyskane z systemu, który zastępujemy naszym oprogramowaniem (ponieważ jego nowe możliwości mogą mieć wpływ na uzyskiwane wyniki). Jeśli wyniki testów są niepomyślne, warto najpierw sprawdzić kilka razy poprawność danych testowych, zanim zabierzemy się do poszukiwania błędu w kodzie. Przedstawiony powyżej kod nie umożliwia testowania wyjątków. Zastanów się, w jaki sposób zaimplementować taką możliwość. Wybierz taki sposób testowania, który pozwoli najłatwiej sprawdzić, czy metoda działa poprawnie. Warunki brzegowe W przykładzie z wyszukiwaniem największego elementu listy udało nam się zidentyfikować szereg warunków brzegowych: gdy największy element znajdował się na końcu listy, gdy lista zawierała wartość ujemną, gdy lista była pusta i tak dalej. Identyfikacja warunków brzegowych jest jednym z najwartościowszych aspektów testowania, ponieważ pozwala wykryć i przetestować obszary, w których prawdopodobieństwo niepoprawnego działania kodu jest naj- większe. Typowe warunki brzegowe powstają na skutek: 58 JUnit. Pragmatyczne testy jednostkowe w Javie t wprowadzenia całkowicie błędnych lub niespójnych danych wejściowych, na przykład łańcucha !*W:X\ Gi/w~ g/h#WQ@ jako nazwy pliku; t nieprawidłowo sformatowanych danych, takich jak adres e-mail, który nie zawiera głównej domeny ( fred@foobar. ); t niewprowadzenia odpowiednich wartości (wtedy pojawiają się wartości 0, 0.0, lub null); t pojawienia się wartości znacznie przekraczających oczekiwania (na przykład wiek osoby równy 10 000 lat); t pojawienia się duplikatów na listach, które nie powinny ich zawierać; t wystąpienia list nieuporządkowanych zamiast uporządkowanych i na odwrót; spróbuj na przykład przekazać algorytmowi sortowania listę, która jest już posortowana, albo nawet posortuj ją w odwrotnym porządku; t zakłócenia przewidywanego porządku zdarzeń, na przykład próby wydrukowania dokumentu przed zalogowaniem się. Warunków brzegowych można poszukiwać w przedstawionych poniżej obszarach. W przypadku każdego z podanych niżej warunków należy za- stanowić się, czy dotyczy on testowanej metody, a jeśli tak, to co się stanie, gdy zostanie naruszony: t Zgodność — czy wartość jest zgodna z oczekiwanym formatem? t Uporządkowanie — czy zbiór wartości jest odpowiednio uporządkowany? t Zakres — czy wartość należy do przedziału oczekiwanych wartości? t Odwołanie — czy kod odwołuje się do zewnętrznych obiektów, które są poza jego kontrolą? t Istnienie — czy wartość istnieje (czyli jest różna od null, zera, obecna w zbiorze itd.)? Rozdział 4. • Co testować? 59 t Liczność — czy występuje dokładnie tyle wartości, ile jest oczekiwanych? t Czas (absolutny i względny) — czy wszystkie zdarzenia zachodzą w oczekiwanej kolejności i we właściwym czasie? Wymienione obszary warunków brzegowych omówimy w następnym roz- dziale. Sprawdzanie relacji zachodzących w odwrotnym kierunku Działanie niektórych metod można przetestować, używając logiki ich działania w odwrotnym kierunku. Na przykład działanie metody wy- znaczającej pierwiastek kwadratowy możemy sprawdzić, podnosząc wynik do kwadratu i porównując go z wartością wejściową: public void testSquareRootUsingInverse() { double x = mySquareRoot(4.0); assertEquals(4.0, x * x, 0.0001); } Na podobnej zasadzie, wyszukując rekord w bazie danych, możesz sprawdzić działanie metody, która go tam wstawiła. Jednak implementując odwrotną logikę działania metody, należy zachować szczególną ostrożność, ponieważ niepoprawne działanie metody może nie zostać wykryte z powodu tych samych błędów w implementacjach obu me- tod. Dlatego też tam, gdzie jest to tylko możliwe, najlepiej użyć innego kodu źródłowego do implementacji metody działającej w kierunku odwrot- nym. W naszym przykładzie testu metody pierwiastkowania wykorzystali- śmy w tym celu zwykły operator mnożenia. W przypadku testowania metody wstawiającej rekord do bazy danych najlepiej użyć metody wyszukiwania dostarczonej przez producenta systemu zarządzania bazą danych. 60 JUnit. Pragmatyczne testy jednostkowe w Javie Kontrola wyników na wiele sposobów Wyniki działania testowanych metod możemy sprawdzać na wiele sposobów. Zwykle bowiem istnieje więcej niż jeden sposób wyznaczenia interesującej nas wartości. Podczas implementacji kodu produkcyjnego wybieramy ten algorytm, który jest najefektywniejszy lub ma charakterystykę interesującą pod innym względem. Natomiast pozostałe możemy wykorzystać w celu sprawdzenia wyników podczas testowania. Technika ta jest szczególnie pomocna, gdy istnieje ogólnie znany, sprawdzony sposób uzyskania wyni- ków, który jednak jest zbyt mało efektywny lub elastyczny, by mógł zostać użyty w kodzie produkcyjnym. Mniej efektywnego algorytmu możemy użyć do sprawdzenia, czy algorytm zastosowany w wersji produkcyjnej daje takie same wyniki2: public void testSquareRootUsingStd() { double number = 3880900.0; double root1 = mySquareRoot(number); double root2 = Math.sqrt(number); assertEquals(root2, root1, 0.0001); } Inny sposób zastosowania tej techniki polega na sprawdzeniu, czy różne dane sumują się we właściwy sposób. Załóżmy na przykład, że pracujemy nad systemem obsługi biblioteki. W takim systemie liczba egzemplarzy danej książki powinna zawsze zgadzać się z sumą egzemplarzy znajdujących się na półkach biblioteki i egzemplarzy wypożyczonych. Liczba poszcze- gólnych egzemplarzy stanowi osobne dane, które mogą nawet być raporto- wane przez obiekty różnych klas, ale muszą być ze sobą zgodne i wobec tego mogą być używane podczas testowania. 2 Niektóre arkusze kalkulacyjne (na przykład Microsoft Excel) stosują podobną technikę w celu sprawdzenia, czy do rozwiązania danego problemu użyte zostały odpowiednie modele i metody i czy wyniki działania różnych metod są ze sobą zgodne. Rozdział 4. • Co testować? 61 Wymuszanie warunków powstawania błędów Gdy kod produkcyjny pracuje już w rzeczywistym systemie, narażony jest na sytuacje związane z różnego rodzaju błędami, takimi jak brak miejsca na dysku, awarie sieci czy niepoprawna praca innych aplikacji. Aby przete- stować zachowanie kodu w takich sytuacjach, musimy umieć je wywołać. Nie jest to trudne, gdy dotyczy na przykład przekazania kodowi niepo- prawnych parametrów, ale już symulacja błędów sieci wymaga zastosowa- nia odpowiednich technik. Jedną z nich — polegającą na użyciu obiektów imitujących — omówimy w rozdziale 6. Zanim tam dotrzesz, spróbuj za- stanowić się, jakie rodzaje błędów lub ograniczeń wprowadzanych przez środowisko wykonywania kodu należy przetestować? Sporządź krótką ich listę, zanim przejdziesz do dalszej lektury. Zastanów się nad tym, zanim przejdziesz do dalszej lektury... A oto kilka typowych problemów, które udało nam się wymyślić. t Brak wolnej pamięci. t Brak wolnego miejsca na dysku. t Nieprawidłowy czas systemu. t Brak dostępu do sieci i błędy transmisji. t Przeciążenie systemu. t Ograniczona paleta kolorów. t Zbyt duża lub zbyt mała rozdzielczość obrazu. Charakterystyka efektywnościowa Kolejnym obszarem wartym przetestowania jest charakterystyka efektywno- ściowa. Nie chodzi tutaj o samą efektywność działania kodu, lecz o sposób jej zmiany w odpowiedzi na zwiększającą się ilość danych wejściowych, rosnący poziom komplikacji rozwiązywanego problemu i tym podobne. 62 JUnit. Pragmatyczne testy jednostkowe w Javie W tym przypadku zależy nam przede wszystkim na przeprowadzeniu testu regresji charakterystyki efektywnościowej. Często bowiem zdarza się, że pewna wersja systemu pracuje poprawnie, ale już następna okazuje się za- skakująco wolna. Zwykle nie wiemy wtedy, jaka jest tego przyczyna, kto, kiedy i dlaczego wprowadził modyfikacje, które pogorszyły efektywność kodu. A użytkownicy zniecierpliwieni czekają na rozwiązanie problemu. Aby uniknąć takiego scenariusza, możemy wykonać kilka podstawowych testów, które upewnią nas, że krzywa efektywności jest stabilna w nowej wersji kodu. Załóżmy na przykład, że napisaliśmy filtr pozwalający iden- tyfikować witryny internetowe, do których dostęp chcemy zablokować. Stworzony kod działa poprawnie w przypadku kilkudziesięciu witryn, ale czy równie efektywnie będzie się zachowywać w przypadku 10 000 lub nawet 100 000 witryn? Aby się o tym przekonać, musimy napisać odpo- wiedni test jednostkowy. public void testURLFilter() { Timer timer = new Timer(); String naughty_url = http://www.xxxxxxxxxxx.com ; // Najpierw wyszukaj niedozwolony URL na małej liście URLFilter filter = new URLFilter(small_list); timer.start(); filter.check(naughty_url); timer.end(); assertTrue(timer.elapsedTime() 1.0); // Następnie wyszukaj niedozwolony URL na większej liście filter = new URLFilter(big_list); timer.start(); filter.check(naughty_url); timer.end(); assertTrue(timer.elapsedTime() 2.0); // Na koniec wyszukaj niedozwolony URL na liście o jak największym rozmiarze filter = new URLFilter(huge_list); timer.start(); filter.check(naughty_url); timer.end(); assertTrue(timer.elapsedTime() 3.0); } Rozdział 4. • Co testować? 63 Przeprowadzenie takiego testu daje nam gwarancję, że kod spełnia wymaga- nia odnośnie do jego efektywności. Ponieważ jego wykonanie zajmuje kilka sekund, nie musimy uruchamiać go za każdym razem. Wystarczy, że będzie- my go wykonywać wraz z innymi testami w nocy lub co kilka dni, a zosta- niemy zaalarmowani o pojawiających się problemach z efektywnością kodu wystarczająco wcześnie, aby poprawić je na czas. Istnieje wiele dekoratorów umożliwiających dokładniejsze pomiary efektywno- ści poszczególnych metod, symulację warunków silnego obciążenia i tym podobne. Jednym z takich produktów jest dostępny bezpłatnie JUnitPerf3. 3 http://www.clarkware.com
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

JUnit. Pragmatyczne testy jednostkowe w Javie
Autor:
,

Opinie na temat publikacji:


Inne popularne pozycje z tej kategorii:


Czytaj również:


Prowadzisz stronę lub blog? Wstaw link do fragmentu tej książki i współpracuj z Cyfroteką: