Czy powinienem oddzielić testy jednostkowe i testy integracyjne?

17

Muszę napisać testy jednostkowe i testy integracyjne dla projektu.

  • Czy wszystkie testy powinny być umieszczone w jednym folderze testów ?
  • A może testy jednostkowe i testy integracyjne powinny znajdować się w osobnym folderze testów ?
  • Czy powinienem nawet umieścić je w osobnych projektach ?

Jeśli trzymam je razem, czy takie podejście ma jakieś zalety lub wady?

Ahmed Ragheb
źródło
1
Jeśli pracujesz w środowisku CI, ważne jest, aby można je było łatwo zidentyfikować (za pomocą atrybutu itp.), Ponieważ testy integracyjne nie zawsze działają na serwerze kompilacji.
Robbie Dee

Odpowiedzi:

18

Ogólnie: tak, należy umieścić testy integracyjne i testy jednostkowe w różnych folderach. Często programiści nie rysują wyraźnej granicy między tymi dwoma rodzajami testów, a jedynie piszą, jaki rodzaj testu jest użyteczny. Ale testy integracyjne są zwykle wolniejsze, ponieważ często obejmują:

  • Zapytania do bazy danych
  • Żądania sieciowe
  • Zachowanie zależne od czasu
  • Duże ilości danych

W przeciwieństwie do tego, test jednostkowy wyśmiewałby wszelkie kosztowne operacje, więc testy jednostkowe mają tendencję do szybkiego uruchamiania (w rzeczywistości najwolniejszą częścią uruchamiania testu jest często sama platforma testowa).

Gdy programista pracuje w systemie, znajduje się w cyklu edycji-testu. Im szybciej otrzymują informacje zwrotne z testu i im krótszy jest cykl, tym bardziej mogą być wydajni. Dlatego chcemy przeprowadzić tylko ważny test, który szybko się zakończy. Kompletny zestaw testów byłby wykonywany tylko jako część procesu kontroli jakości, np. Na serwerze CI.

Oznacza to, że duże pakiety testowe powinny być podzielone na kategorie. Czy możemy wybrać testy jednostkowe tylko dla konkretnego komponentu? Czy możemy wykluczyć powolne testy? Jednym prostym sposobem na to jest utrzymanie różnych pakietów testowych w różnych katalogach. Jeśli masz tylko kilka testów, pojedynczy katalog również byłby OK, o ile programista może łatwo wybrać podzbiór testów.

Cokolwiek pozwala programiście szybko uzyskać informacje zwrotne, jest dobre. Najbardziej wszechstronny zestaw testów nie ma znaczenia, jeśli nie jest wykonywany regularnie.

Dalsza lektura:

amon
źródło
Czy podczas rozdzielania folderów trzymasz każdy z nich w tym samym pakiecie co kod produkcyjny (abyś mógł przetestować chronione metody)? Przykład: tworzysz moduł maven do testów jednostkowych i inny moduł maven do testów integracyjnych. W ten sposób możesz je rozdzielić i nadal łatwo przetestować chronione metody.
ihebiheb
@ ihebiheb W Javie korzystanie z widoczności pakietu jest dość niezadowolone. W niektórych przypadkach pomocne może być użycie go i dostęp do tych interfejsów API z testów jednostkowych. Ale ogólnie to nie jest konieczne. Testy w stylu integracji nigdy nie potrzebują dostępu do prywatnych członków pakietu. To, czy umieścić testy w osobnym projekcie Maven, zależy od tego, jak chcesz je uruchomić i wdrożyć. Nie przepadam za Javą / Maven, aby móc powiedzieć ci, co jest tutaj rozsądne.
Amon