Odziedziczyłem ładunek testu Junit, ale testy te (poza większością nie działają) są mieszaniną rzeczywistych testów jednostkowych i testów integracyjnych (wymagających systemów zewnętrznych, db itp.).
Próbuję więc wymyślić sposób, aby je oddzielić, tak żebym mógł szybko i przyjemnie przeprowadzić testy jednostkowe, a potem testy integracji.
Dostępne opcje to ...
Podziel je na osobne katalogi.
Przejdź do Junit4 (od v3) i dodaj adnotacje do klas, aby je rozdzielić.
Użyj konwencji nazewnictwa plików, aby określić, czym jest klasa, tj. AdapterATest i AdapterAIntergrationTest.
3 występuje problem polegający na tym, że Eclipse ma opcję „Uruchom wszystkie testy w wybranym projekcie / pakiecie lub folderze”. Dlatego wykonanie testów integracyjnych byłoby bardzo trudne.
2: stwarza ryzyko, że programiści mogą zacząć pisać testy integracyjne w klasach testów jednostkowych i po prostu robi się bałagan.
1: Wydaje się, że jest to najlepsze rozwiązanie, ale moje przeczucia mówią, że musi być lepsze rozwiązanie.
To jest moje pytanie, w jaki sposób rozdzielić testy integracyjne i właściwe testy jednostkowe?
źródło
Odpowiedzi:
Obecnie używam oddzielnych katalogów ze względu na politykę organizacyjną (i starszą wersję Junit 3), ale chcę samodzielnie przejść do adnotacji, teraz jestem w Junit 4.
Nie przejmowałbym się zbytnio, gdyby programiści umieszczali testy integracji w klasach testów jednostkowych - w razie potrzeby dodaj regułę do standardów kodowania.
Interesuje mnie, jakie inne rozwiązania mogą istnieć poza adnotacjami lub fizycznym oddzieleniem klas.
źródło
Możesz je bardzo łatwo podzielić za pomocą kategorii JUnit i Maven.
Pokazano to bardzo, bardzo krótko poniżej, dzieląc testy jednostkowe i integracyjne.
Zdefiniuj interfejs znacznika
Pierwszym krokiem w grupowaniu testu za pomocą kategorii jest utworzenie interfejsu znaczników.Ten interfejs będzie używany do oznaczania wszystkich testów, które chcesz uruchomić, jako testy integracji.
Zaznacz swoje klasy testowe
Dodaj adnotację kategorii na początku klasy testowej. Przyjmuje nazwę nowego interfejsu.
Skonfiguruj testy jednostkowe Maven
Piękno tego rozwiązania polega na tym, że nic tak naprawdę nie zmienia się po stronie testów jednostkowych.Po prostu dodajemy konfigurację do wtyczki maven surefire, aby ignorowała wszelkie testy integracji.
Kiedy wykonujesz czysty test mvn, zostaną uruchomione tylko nieoznakowane testy jednostkowe.
Skonfiguruj testy integracji Maven
Ponownie konfiguracja tego jest bardzo prosta.Aby uruchomić tylko testy integracji, użyj tego:
Jeśli umieścisz to w profilu o identyfikatorze
IT
, możesz uruchomić tylko szybkie testy przy użyciumvn clean install
. Aby uruchomić tylko integrację / wolne testy, użyjmvn clean install -P IT
.Ale najczęściej będziesz chciał domyślnie uruchamiać szybkie testy, a wszystkie testy z
-P IT
. W takim przypadku musisz użyć sztuczki:Jak widać, wykluczam testy z adnotacją
java.io.Serializable
. Jest to konieczne, ponieważ profil odziedziczy domyślną konfigurację wtyczki Surefire, więc nawet jeśli powiesz<excludedGroups/>
lub<excludedGroups></excludedGroups>
, wartośćcom.test.annotation.type.IntegrationTest
zostanie użyta.Nie możesz również użyć,
none
ponieważ musi to być interfejs na ścieżce klas (Maven to sprawdzi).Uwagi:
surefire-junit47
jest konieczna tylko wtedy, gdy Maven nie przełącza się automatycznie na biegacz JUnit 4. Użycie elementugroups
lubexcludedGroups
powinno wywołać przełącznik. Zobacz tutaj .@RunWith()
adnotacji do uruchamiania pakietów lub testów opartych na Spring.źródło
Używamy wtyczki Maven Surefire do uruchamiania testów jednostkowych i wtyczki Maven Failsafe do uruchamiania testów integracyjnych. Testy jednostkowe są zgodne z
**/Test*.java **/*Test.java **/*TestCase.java
konwencjami nazewnictwa, testy integracji -**/IT*.java **/*IT.java **/*ITCase.java
. Więc to właściwie twoja opcja numer trzy.W kilku projektach używamy TestNG i definiujemy różne grupy testowe do testów integracyjnych / jednostkowych, ale to prawdopodobnie nie jest dla Ciebie odpowiednie.
źródło
Przeniósłbym się do Junit4 tylko po to, żeby go mieć :)
Możesz podzielić je na różne zestawy testów. Nie wiem, jak są zorganizowane w Junit3, ale w Junit4 powinno być łatwo po prostu zbudować zestawy testów i umieścić wszystkie prawdziwe testy jednostkowe w jednym z nich, a następnie użyć drugiego zestawu do testów integracyjnych.
Teraz zdefiniuj konfigurację uruchamiania dla obu pakietów w eclipse i możesz łatwo uruchomić pojedynczy pakiet. Pakiety te można również uruchamiać z zautomatyzowanego procesu, umożliwiającego uruchamianie testów jednostkowych za każdym razem, gdy zmienia się źródło, a być może testy integracyjne (jeśli są naprawdę duże) tylko raz dziennie lub raz na godzinę.
źródło
Korzystanie z adnotacji sprężynowej IfProfileValue umożliwia osiągnięcie tego bez wtyczki maven lub wymaganej konfiguracji.
Adnotuj klasy lub metody testu integracji przy użyciu właściwości IfProfileValue
Aby uruchomić tylko przy użyciu testów jednostkowych:
Aby uruchomić przy użyciu testu integracji i testów jednostkowych:
Ponadto „Uruchom wszystkie testy” w środowisku IDE spowoduje uruchomienie tylko testu jednostkowego. Dodaj
-Dtest-groups=integration
do argumentów maszyny wirtualnej, aby uruchomić zarówno testy integracji, jak i testy jednostkowe.źródło
Nie ma jednej dobrej odpowiedzi. Jak już wyjaśniłeś, jest na to kilka sposobów, które będą działać. Zrobiłem zarówno schemat nazewnictwa plików, jak i podzieliłem rzeczy na różne katalogi.
Wygląda na to, że podzielenie rzeczy na różne katalogi może działać lepiej dla ciebie, a to wydaje mi się trochę jaśniejsze, więc skłaniam się ku temu.
Nie sądzę, żebym próbował adnotacji, ponieważ wydaje mi się to bardziej szczegółowe. Czy naprawdę chcesz, aby te dwa typy testów były zmieszane razem w tym samym pliku? Nie chciałbym.
źródło