Testy jednostkowe testują wyłącznie lokalne wykonywanie metod i jest nawet niewskazane aby testowane metody odnosiły się do zewnętrznych, zdalnych zasobów.Rozbudowane systemy są często rozproszone, działające na wielu komputerach oraz składających się z wielu modułów. Podstawowe pytanie brzmi: Jak sprawdzić czy utworzone moduły współpracują ze sobą? Otóż należy przeprowadzić testy integracyjne zgodnie z wybraną metodyką.
Testy integracyjne tak jak testy funkcjonalne powinny być przeprowadzane na bieżąco. Nie powinno czekać się z testami integracyjnymi aż do momentu kiedy wszystkie moduły będą ukończone – wtedy ciężej zlokalizować połączenia oraz na wszelkie zmiany architektoniczne może być już za późno.
Po walidacji logiki zawartej w pojedynczych modułach przychodzi czas na sprawdzenie połączeń między pakietami. Wykonanie testów integracyjnych może nastąpić wyłącznie po prawidłowej weryfikacji kodu przez testy jednostkowe. Jeśli występuje błąd na poziomie metod (testy jednostkowe), tym bardziej będzie występował na poziomie całych pakietów.
Przed rozpoczęciem jakichkolwiek testów integracyjnych należy zidentyfikować wszelkie połączenia między modułami. Powyższy diagram przedstawia fikcyjny system – grupę modułów z odpowiednimi relacjami.Przez moduł rozumie się zarówno klasę jak i bibliotekę. Stopień przyjętego rozdrobnienia zależy od testera. Z praktyki wynika, że należy przyjąć kryterium logiczne czyli podzielić system na pewne fragmenty funkcjonalne. Czasami testowanie pojedynczych klas nie ma sensu ponieważ są one zbyt mało skomplikowane i prawdopodobieństwo wystąpienia błędu związanego z integracją jest niskie.
W testach integracyjnych wykorzystuje się obiekty Mock. Skuteczność zależy niestety w dużej mierze od architektury systemu. Jeśli wykorzystywaliśmy IoC będzie nam dużo łatwiej testować system poprzez odłączanie kolejnych modułów. Istnieje kilka podejść do testowania – ale o tym w następnych poście!