JUnit Pragmatyczne testy jednostkowe w Javie


IDZ DO
IDZ DO
PRZYKŁADOWY ROZDZIAŁ
PRZYKŁADOWY ROZDZIAŁ
JUnit. Pragmatyczne
SPIS TRERCI
SPIS TRERCI
testy jednostkowe w Javie
KATALOG KSIĄŻEK
KATALOG KSIĄŻEK
Autorzy: Andy Hunt, Dave Thomas
Tłumaczenie: Jaromir Senczyk
KATALOG ONLINE
KATALOG ONLINE
ISBN: 83-246-0406-5
Tytuł oryginału: Pragmatic Unit Testing in Java with JUnit
ZAMÓW DRUKOWANY KATALOG
ZAMÓW DRUKOWANY KATALOG Format: B5, stron: 192
TWÓJ KOSZYK
TWÓJ KOSZYK
Przetestuj swoje aplikacje podczas ich tworzenia
DODAJ DO KOSZYKA
DODAJ DO KOSZYKA
" Poznaj strukturę testów jednostkowych
" Stwórz poprawne testy jednostkowe
" Wykorzystaj moduły testowe w projekcie
CENNIK I INFORMACJE
CENNIK I INFORMACJE
Testy jednostkowe są niezwykle ważnym narzędziem programisty. Przeprowadzane
podczas pisania aplikacji pozwalają na sprawdzenie poprawnoSci kodu, wyłapanie
ZAMÓW INFORMACJE
ZAMÓW INFORMACJE
błędów i szybkie usunięcie ich. W nowoczesnych metodykach wytwarzania
O NOWORCIACH
O NOWORCIACH
oprogramowania testy jednostkowe są jednymi z najważniejszych elementów procesu.
Tworzenie systemów bez korzystania z testów jednostkowych często porównywane
ZAMÓW CENNIK
ZAMÓW CENNIK
jest do pisania programów na kartce. Nowoczesne narzędzia takie, jak JUnit bardzo
ułatwiają przeprowadzanie testów jednostkowych, integrując się ze Srodowiskami
programistycznymi.
CZYTELNIA
CZYTELNIA
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
FRAGMENTY KSIĄŻEK ONLINE
FRAGMENTY KSIĄŻEK ONLINE
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.
" Cele przeprowadzania testów jednostkowych
" Planowanie testów
" Implementacja testów z wykorzystaniem JUnit
" Zasady stosowania testów
" Automatyzowanie testów
" OkreSlanie częstotliwoSci testowania
" Projektowanie kodu pod kątem testowania
Wydawnictwo Helion
Przekonaj się, jak bardzo testy jednostkowe ułatwią Ci pracę
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl
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ózdz 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:
Czy wyniki są poprawne?
Czy warunki brzegowe zostały prawidłowo określone?
Czy można sprawdzić relacje zachodzące w odwrotnym
kierunku?
Czy można sprawdzić wyniki, uzyskując je w alternatywny
sposób?
54 JUnit. Pragmatyczne testy jednostkowe w Javie
Czy można wymusić warunki zajścia błędu?
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));
}
}
}
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
TestLargestDataFile.java
testdata.txt
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
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;
nieprawidłowo sformatowanych danych, takich jak adres e-mail,
który nie zawiera głównej domeny ("fred@foobar.");
niewprowadzenia odpowiednich wartości (wtedy pojawiają się
wartości 0, 0.0, "" lub null);
pojawienia się wartości znacznie przekraczających oczekiwania
(na przykład wiek osoby równy 10 000 lat);
pojawienia się duplikatów na listach, które nie powinny
ich zawierać;
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;
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:
Zgodność  czy wartość jest zgodna z oczekiwanym formatem?
Uporządkowanie  czy zbiór wartości jest odpowiednio
uporządkowany?
Zakres  czy wartość należy do przedziału oczekiwanych
wartości?
Odwołanie  czy kod odwołuje się do zewnętrznych obiektów,
które są poza jego kontrolą?
Istnienie  czy wartość istnieje (czyli jest różna od null, zera,
obecna w zbiorze itd.)?
Rozdział 4. " Co testować? 59
Liczność  czy występuje dokładnie tyle wartości, ile jest
oczekiwanych?
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 zró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ądz 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ć.
Brak wolnej pamięci.
Brak wolnego miejsca na dysku.
Nieprawidłowy czas systemu.
Brak dostępu do sieci i błędy transmisji.
Przeciążenie systemu.
Ograniczona paleta kolorów.
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


Wyszukiwarka

Podobne podstrony:
testy jednostkowe VS
Laboratorium Testy jednostkowe
informatyka w prawnicza testy
Historia państwa i prawa Polski Testy Tablice
Sprawdziany i Testy Nauczycieli
Active Directory omówienie domyślnych jednostek organizacyjnych

więcej podobnych podstron