Mam projekt wielomodułowy maven2, aw każdym z moich modułów podrzędnych mam testy JUnit, które są nazwane Test.java
oraz odpowiednio Integration.java
dla testów jednostkowych i testów integracji. Kiedy wykonuję:
mvn test
wszystkie testy JUnit *Test.java
w modułach potomnych są wykonywane. Kiedy wykonuję
mvn test -Dtest=**/*Integration
żaden z Integration.java
testów nie zostanie wykonany w ramach modułów potomnych.
Wydaje mi się, że jest to dokładnie to samo polecenie, ale to z opcją -Dtest = / * Integration ** nie działa, wyświetla 0 testów uruchamianych na poziomie nadrzędnym, których nie ma żadnych testów
Odpowiedzi:
Możesz skonfigurować Maven's Surefire do osobnego uruchamiania testów jednostkowych i testów integracji. W fazie standardowych testów jednostkowych uruchamiasz wszystko, co nie pasuje do wzorca testu integracji. Następnie tworzysz drugą fazę testową, która uruchamia tylko testy integracji.
Oto przykład:
źródło
Cykl życia kompilacji Maven obejmuje teraz fazę „testów integracji” do uruchamiania testów integracyjnych, które są uruchamiane niezależnie od testów jednostkowych uruchamianych w fazie „testowej”. Działa po „pakiecie”, więc jeśli uruchomisz „mvn verify”, „mvn install” lub „mvn deploy”, po drodze zostaną przeprowadzone testy integracji.
Domyślnie integracja test prowadzi zajęcia testowe nazwane
**/IT*.java
,**/*IT.java
i**/*ITCase.java
, ale to może być skonfigurowany.Szczegółowe informacje na temat okablowania tego wszystkiego, zobaczyć Failsafe wtyczki , w stronę wykorzystania Failsafe (nie prawidłowo połączony z poprzedniej strony, jak to piszę), a także sprawdzić tę Sonatype blogu .
źródło
mvn integration-test
uruchamia również testy jednostkowe (przy użyciu metody surefire), alemvn failsafe:integration-test
uruchamia tylko testy integracji odporne na uszkodzenia.package
fazie, oznacza to, że powinienem umieścić cały mój kod źródłowy Java IT podsrc/main/java
zamiast wsrc/test/java
prawo?Zrobiłem DOKŁADNIE to, co chcesz i działa świetnie. Testy jednostkowe „* Testy” są zawsze uruchamiane, a „* IntegrationTests” działają tylko wtedy, gdy wykonujesz weryfikację mvn lub instalację mvn. Tutaj jest fragment mojego POM. serg10 prawie miał rację… ale nie całkiem.
Powodzenia!
źródło
clean compile integration-test -Dmaven.test.failure.ignore=false
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.
Gdy to zrobisz
mvn clean test
, zostaną uruchomione tylko nieoznaczone testy jednostkowe.Skonfiguruj testy integracji Maven
Ponownie konfiguracja tego jest bardzo prosta.Używamy standardowej, bezpiecznej wtyczki i konfigurujemy ją tak, aby uruchamiała tylko testy integracyjne.
Konfiguracja korzysta ze standardowego celu wykonania, aby uruchomić bezpieczną wtyczkę w fazie testów integracji podczas kompilacji.
Możesz teraz zrobić
mvn clean install
.Tym razem, oprócz uruchomionych testów jednostkowych, testy integracji są uruchamiane w fazie testów integracji.
źródło
Powinieneś spróbować użyć bezpiecznej wtyczki maven . Możesz powiedzieć, aby zawierał określony zestaw testów.
źródło
maven-failsafe-plugin
udał się na Plugin Graveyardfailsafe
wtyczki domaven-failsafe-plugin
. Wygląda namaven-failsafe-plugin
to, że jest nadal aktywny (dokumenty zostały ostatnio przesłane w marcu 2014 r.).Domyślnie Maven uruchamia tylko testy, które mają gdzieś Test w nazwie klasy.
Zmień nazwę na IntegrationTest i prawdopodobnie zadziała.
Alternatywnie możesz zmienić konfigurację Mavena, aby uwzględnić ten plik, ale prawdopodobnie łatwiej i lepiej jest nazwać testy SomethingTest.
Z włączeń i wyłączeń testów :
źródło
Innym sposobem przeprowadzania testów integracyjnych z Mavenem jest skorzystanie z funkcji profilu:
Uruchomienie „mvn clean install” uruchomi domyślną kompilację. Jak określono powyżej, testy integracji zostaną zignorowane. Uruchomienie `` mvn clean install -P Integration-tests '' będzie zawierało testy integracji (ignoruję również pomostowe testy integracji). Co więcej, mam serwer CI, który każdego wieczoru przeprowadza moje testy integracyjne iw tym celu wydaję polecenie „mvn test -P Integration-tests” .
źródło
Możesz postępować zgodnie z dokumentacją mavena aby uruchomić testy jednostkowe z kompilacją i osobno uruchomić testy integracji.
Umożliwi to uruchamianie z domyślnie wyłączonymi wszystkimi testami integracji. Aby je uruchomić, użyj tego polecenia:
źródło
Powinieneś użyć wtyczki maven surefire do uruchamiania testów jednostkowych i wtyczki maven failafe do uruchamiania testów integracyjnych.
Postępuj zgodnie z poniższymi instrukcjami, jeśli chcesz przełączyć wykonywanie tych testów za pomocą flag.
Konfiguracja Mavena
Tak więc testy zostaną pominięte lub przełączone zgodnie z poniższymi zasadami flagi:
Testy można pominąć, korzystając z poniższych flag:
-DskipTests
pomija testy jednostkowe i integracyjne-DskipUnitTests
pomija testy jednostkowe, ale wykonuje testy integracji-DskipIntegrationTests
pomija testy integracyjne, ale wykonuje testy jednostkoweUruchomione testy
Uruchom poniżej, aby wykonać tylko testy jednostkowe
Możesz wykonać poniższe polecenie, aby uruchomić testy (zarówno jednostkowe, jak i integracyjne)
Aby uruchomić tylko testy integracji, wykonaj następujące czynności
Lub pomiń testy jednostkowe
Ponadto, aby pominąć testy integracyjne w trakcie
mvn install
, wykonajMożesz pominąć wszystkie testy za pomocą
źródło