2013-05-23 37 views
24

Zaczynam używać testów jednostkowych w moich projektach i piszę testy, które są testowane na poziomie metody/funkcji.Dokładnie to, co jest testowaniem integracyjnym - w porównaniu z jednostką

Rozumiem to i ma to sens.

Ale czym jest testowanie integracyjne? Z tego, co czytam, przesuwa zakres testowania do testowania większych funkcji aplikacji.

Oznacza to, że piszę nowy zestaw testów do badania większych rzeczy, takich jak (w witrynie e-commerce) funkcjonalność kasy, funkcjonalność logowania użytkownika, funkcjonalności koszyka. Czyli napisałbym 3 testy integracyjne?

Czy to prawda - jeśli nie, ktoś może wyjaśnić, co to znaczy.

Również robi test integracyjny obejmować (kontekst aplikacji internetowych tutaj) ui i będzie zatrudniać pokroju selen do zautomatyzowania. Lub jest testowanie integracyjne nadal na poziomie kodu, ale łączenie klas różnic i obszarów kodu.

Odpowiedz

25

Rozważmy metody jak ten PerformPayment(double amount, PaymentService service);

Test

Jednostka będzie test, w którym stworzenie makiety dla service argument.

Test integracja byłaby test gdzie użyć rzeczywistej usługi zewnętrznej, tak aby sprawdzić, czy usługa, która reaguje prawidłowo do danych wejściowych.

+0

Czy są one wykonywane na poziomie interfejsu użytkownika? przy użyciu selenu, czy jest napisany inny pakiet testów, podobny do zestawu testów jednostkowych, ale o szerszym zakresie? –

+0

Niekoniecznie. Pomyśl o usłudze PaymentService za pomocą zewnętrznego źródła, takiego jak baza danych lub interfejs API innej firmy. Dostęp do niego może potrwać kilka sekund (w zły dzień) lub może to być długotrwały proces. Jest zbyt powolny dla testów jednostkowych (stąd przedrzeźniając go), ale nadal chcesz go przetestować, aby upewnić się, że działa prawidłowo. To właśnie tu przychodzi testowanie integracyjne. Nie są to testy, które uruchamia się wielokrotnie, zwykle przed wydaniem wydania lub jeśli masz je w CI. – firelore

0

O ile widzę, testy selenu powinny znajdować się w innym zestawie testów. Testy te są z natury najbardziej delikatnym testem, nawet jeśli prawidłowo je napiszesz. Tutaj możesz użyć Specflow lub jakiegoś innego rodzaju specyfikacji poprzez przykładową strukturę. Być może możesz nazwać te testy jako testy akceptacyjne. Są one przeznaczone dla programistów i ekspertów biznesowych. Testy integracyjne lub modułowe zwykle nie używają interfejsu użytkownika. Testy integracji sprawiają, że niektóre klasy współpracują ze sobą. Są to testy niższego poziomu niż testy selenowe i nieco łatwiejsze w utrzymaniu. Te testy są przeznaczone tylko dla programistów.

0

Oto kilka ograniczeń, że dobry spełnia testów jednostkowych. Spełnienie tych ograniczeń wymaga również dobrego kodu, który można przetestować.

  1. nr I/O - twardym lub sieci
  2. tylko jedno twierdzenie (jeśli jest wiele, powinny one być mniejsze wariacje siebie)
  3. nie sprawuje (cover) znacznie bardziej kod produkcji niż to, co twierdzi

Ograniczenia te zwykle nie mają zastosowania do testów integracyjnych.

1

Testowanie jednostek polega na testowaniu logiki biznesowej w ramach klasy lub fragmentu kodu. Na przykład, jeśli testujesz, że konkretna sekcja twojej metody powinna wywoływać repozytorium, twój test jednostki sprawdzi, czy metoda interfejsu, który wywołuje repozytorium, nazywa się poprawną liczbą razy, których oczekiwałeś, w przeciwnym razie nie powiedzie się test.

Z kolei testowanie integralności sprawdza, czy rzeczywiste zachowanie usługi lub repozytorium (bazy danych) jest poprawne. Sprawdza, czy na podstawie przekazanych danych pobierasz oczekiwane wyniki. Jest to zgodne z twoimi testami jednostkowymi, dzięki czemu wiesz, jakie dane powinieneś pobierać i co robi z tymi danymi.

0

Testy jednostkowe są testami, które testują kod w rzeczywistej klasie. Inne zależności tej klasy są wyśmiewane lub ignorowane, ponieważ fokus jest testowaniem kodu wewnątrz klasy.

Testy integracyjne to testy obejmujące dostęp do dysku, usługi aplikacji i/lub ramy z docelowej aplikacji. Testy integracji uruchamiają izolowane z innych usług.

Podam przykład. Masz aplikację Spring i wykonałeś wiele testów jednostkowych, aby zagwarantować, że logika biznesowa działa poprawnie. Idealny. Ale jaki rodzaj testów trzeba zagwarantować:

  • Usługa Aplikacja może rozpocząć
  • Twoja jednostka baza danych jest mapowany poprawnie
  • masz wszystkie niezbędne adnotacje działa zgodnie z oczekiwaniami
  • filtr działa prawidłowo
  • Twój API przyjmuje jakieś dane
  • Twój główną cechą jest naprawdę pracujących w podstawowym scenariuszu
  • Twoje zapytanie do bazy danych działa zgodnie z oczekiwaniami
  • itp ...

ta nie może być wykonana z testów jednostkowych, ale (dobrze, Wiosna Kawałek można zrobić niektóre z nich ...), jak programista, musisz to również zagwarantować. To jest rola testów integracyjnych.

Idealny scenariusz testy integracyjne działa niezależnie od innych systemów, że aplikacja może wykorzystać w środowisku produkcyjnym (za pomocą Wiremock dla połączeń odpoczynek, bazy danych pamięci, etc).

Nieco ciekawości: Maven ma specjalną wtyczkę do testów integracyjnych: maven failsafe plugin, która wykonała klasy testowe, których nazwa kończy się na IT. Przykład: UserIT.java.

Zamieszanie, co oznacza test Integracja

Niektórzy ludzie rozumieją „test integracyjny” jako testu polegającego na „integrację” dla innych systemów, które aktualnie w użyciu system. Tego rodzaju testy można przeprowadzać tylko w środowisku, w którym wszystkie te systemy są gotowe do udziału w tobie.

To może być tylko problem nazewnictwa, ale mamy brak testów (co rozumiem jako testy integracyjne), który odczuwa konieczność elementów opisanych powyżej. Wręcz przeciwnie, skaczemy o definicję testów jednostkowych (tylko klasa testowa) do testu integracji (cały prawdziwy system do góry). Co jest w środku, jeśli nie testy integracyjne?

Powiązane problemy