Professional Documents
Culture Documents
PRZYKADOWY ROZDZIA
SPIS TRECI
KATALOG KSIEK
KATALOG ONLINE
ZAMW DRUKOWANY KATALOG
TWJ KOSZYK
DODAJ DO KOSZYKA
CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK
CZYTELNIA
FRAGMENTY KSIEK ONLINE
JUnit. Pragmatyczne
testy jednostkowe w Javie
Autorzy: Andy Hunt, Dave Thomas
Tumaczenie: Jaromir Senczyk
ISBN: 83-246-0406-5
Tytu oryginau: Pragmatic Unit Testing in Java with JUnit
Format: B5, stron: 192
Wydawnictwo Helion
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 osign? ....................................................................................... 15
Jak testowa? ................................................................................................... 17
Wymwki od testowania .................................................................................. 18
Zawarto ksiki ............................................................................................ 23
Rozdzia 2. Najprostsze testy jednostkowe ......................................25
Planowanie testw ........................................................................................... 26
Testowanie prostej metody ............................................................................... 28
Wicej testw .................................................................................................. 33
Rozdzia 3. Implementacja testw JUnit ..........................................35
Struktura testw jednostkowych ........................................................................ 35
Asercje JUnit .................................................................................................. 37
Szkielet JUnit ................................................................................................. 40
Spis treci
54
Rozdzia 4. Co testowa?
55
junit.framework.*;
java.io.*;
java.util.ArrayList;
java.util.StringTokenizer;
To jest oczywicie art, przecie zastosowanie jzyka XML jest obligatoryjne we wszystkich
wspczesnych projektach?
56
TestLargestDataFile.java
while (st.hasMoreTokens()) {
argument_list.add(Integer.valueOf(
st.nextToken()));
}
// Zamienia list obiektw 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));
}
}
}
testdata.txt
Rozdzia 4. Co testowa?
57
Warunki brzegowe
W przykadzie z wyszukiwaniem najwikszego elementu listy udao nam si
zidentyfikowa szereg warunkw brzegowych: gdy najwikszy element
znajdowa si na kocu listy, gdy lista zawieraa warto ujemn, gdy lista
bya pusta i tak dalej.
Identyfikacja warunkw brzegowych jest jednym z najwartociowszych
aspektw testowania, poniewa pozwala wykry i przetestowa obszary,
w ktrych prawdopodobiestwo niepoprawnego dziaania kodu jest najwiksze. Typowe warunki brzegowe powstaj na skutek:
58
Rozdzia 4. Co testowa?
t
59
Sprawdzanie relacji
zachodzcych w odwrotnym kierunku
Dziaanie niektrych metod mona przetestowa, uywajc logiki ich
dziaania w odwrotnym kierunku. Na przykad dziaanie metody wyznaczajcej pierwiastek kwadratowy moemy sprawdzi, podnoszc
wynik do kwadratu i porwnujc go z wartoci wejciow:
public void testSquareRootUsingInverse() {
double x = mySquareRoot(4.0);
assertEquals(4.0, x * x, 0.0001);
}
60
Niektre arkusze kalkulacyjne (na przykad Microsoft Excel) stosuj podobn technik w celu
sprawdzenia, czy do rozwizania danego problemu uyte zostay odpowiednie modele i metody
i czy wyniki dziaania rnych metod s ze sob zgodne.
Rozdzia 4. Co testowa?
61
Wymuszanie warunkw
powstawania bdw
Gdy kod produkcyjny pracuje ju w rzeczywistym systemie, naraony jest
na sytuacje zwizane z rnego rodzaju bdami, takimi jak brak miejsca
na dysku, awarie sieci czy niepoprawna praca innych aplikacji. Aby przetestowa zachowanie kodu w takich sytuacjach, musimy umie je wywoa.
Nie jest to trudne, gdy dotyczy na przykad przekazania kodowi niepoprawnych parametrw, ale ju symulacja bdw sieci wymaga zastosowania odpowiednich technik. Jedn z nich polegajc na uyciu obiektw
imitujcych omwimy w rozdziale 6. Zanim tam dotrzesz, sprbuj zastanowi si, jakie rodzaje bdw lub ogranicze wprowadzanych przez
rodowisko wykonywania kodu naley przetestowa? Sporzd krtk ich
list, zanim przejdziesz do dalszej lektury.
Zastanw si nad tym, zanim przejdziesz do dalszej lektury...
Przecienie systemu.
Charakterystyka efektywnociowa
Kolejnym obszarem wartym przetestowania jest charakterystyka efektywnociowa. Nie chodzi tutaj o sam efektywno dziaania kodu, lecz o sposb
jej zmiany w odpowiedzi na zwikszajc si ilo danych wejciowych,
rosncy poziom komplikacji rozwizywanego problemu i tym podobne.
62
Rozdzia 4. Co testowa?
63
Przeprowadzenie takiego testu daje nam gwarancj, e kod spenia wymagania odnonie do jego efektywnoci. Poniewa jego wykonanie zajmuje kilka
sekund, nie musimy uruchamia go za kadym razem. Wystarczy, e bdziemy go wykonywa wraz z innymi testami w nocy lub co kilka dni, a zostaniemy zaalarmowani o pojawiajcych si problemach z efektywnoci kodu
wystarczajco wczenie, aby poprawi je na czas.
Istnieje wiele dekoratorw umoliwiajcych dokadniejsze pomiary efektywnoci poszczeglnych metod, symulacj warunkw silnego obcienia i tym
podobne. Jednym z takich produktw jest dostpny bezpatnie JUnitPerf3.
http://www.clarkware.com