Testy jednostkowe i integracyjne z kategoriami Maven i JUnit

Ten przykład pokazuje, jak podzielić testy jednostkowe i integracyjne przy użyciu kategorii Maven i JUnit.

Jest to szczególnie przydatne w przypadku istniejących zestawów testów i można je wdrożyć w ciągu kilku minut.

Mój poprzedni post pokazał, jak używać profilu maven do dzielenia testów jednostkowych i testów integracyjnych.

//johndobie.blogspot.co.uk/2011/06/seperating-maven-unit-integration-tests.html

To był bardzo dobrze przeczytany post i podoba mi się sposób, w jaki używa oddzielnych katalogów. Jednak ten przykład pokazuje znacznie prostszą technikę, którą można łatwo zastosować do starszych zestawów testów.

Oferuje większość zalet oryginału i wygodniej leży w świecie Maven.

Kod przykładu znajduje się tutaj.

svn co //designbycontract.googlecode.com/svn/trunk/examples/maven/categor... mvn clean install 

Od JUnit 4.8 możesz zdefiniować własne kategorie testów. Umożliwia to etykietowanie i grupowanie testów.

Ten przykład pokazuje, jak łatwo jest oddzielić test jednostkowy i test integracji za pomocą adnotacji @Catgegory.

//kentbeck.github.com/junit/javadoc/latest/org/junit/experimental/categories/Categories.html

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.

public interface IntegrationTest {} 

Dodaj adnotację kategorii na początku klasy testowej. Przyjmuje nazwę nowego interfejsu.

import org.junit.experimental.categories.Category; @Category(IntegrationTest.class) public class ExampleIntegrationTest{ @Test public void longRunningServiceTest() throws Exception { } } 

Kategorie mogą służyć do oznaczania klas lub metod. Naprawdę moim zdaniem należy tylko oznaczyć klasę.

Jeśli masz zarówno testy jednostkowe, jak i testy integracji w jednej klasie, podziel ją.

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.

 org.apache.maven.plugins maven-surefire-plugin 2.11   org.apache.maven.surefire surefire-junit47 2.12     **/*.class  com.test.annotation.type.IntegrationTest   

Istnieją 2 bardzo ważne części. Pierwszym jest skonfigurowanie surefire tak, aby wykluczył wszystkie testy integracji.

com.test.annotation.type.IntegrationTest 

Surefire przeprowadzi wszystkie Twoje testy, z wyjątkiem tych oznaczonych jako test integracji.

Inną ważną częścią jest upewnienie się, że wtyczka surefire używa właściwego dostawcy JUnit. Dostawca JUnit47 jest potrzebny do poprawnego wykrywania kategorii.

  org.apache.maven.surefire surefire-junit47 2.12   

Aby upewnić się, że to działa poprawnie, możemy uruchomić testy jednostkowe

mvn clean test 

Z danych wyjściowych poniżej widać, że test jednostkowy jest wykonywany, ale nie test integracji.

------------------------------------------------------- T E S T S ------------------------------------------------------- Running com.test.EmptyUnitTest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0 sec Results : Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ 

Ponownie konfiguracja tego jest bardzo prosta.

Używamy standardowej, bezpiecznej wtyczki i konfigurujemy ją tak, aby uruchamiała tylko testy integracyjne.

 maven-failsafe-plugin 2.12   org.apache.maven.surefire surefire-junit47 2.12    com.test.annotation.type.IntegrationTest     integration-test    **/*.class      

Konfiguracja korzysta ze standardowego celu wykonania, aby uruchomić bezpieczną wtyczkę w fazie testów integracji podczas kompilacji.

Poniższa konfiguracja zapewnia uruchamianie tylko testów integracji.

com.test.annotation.type.IntegrationTest 

I znowu dostawca JUnit musi być poprawnie skonfigurowany.

  org.apache.maven.surefire surefire-junit47 2.12   

Otóż ​​to!

Możemy teraz uruchomić całą kompilację.

mvn clean install 

Tym razem, poza uruchomieniem testów jednostkowych, testy integracji są uruchamiane w fazie testów integracji.

------------------------------------------------------- T E S T S ------------------------------------------------------- Running com.test.AnotherEmptyIntegrationTest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.016 sec Running com.test.EmptyIntegrationTest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0 sec Results : Tests run: 2, Failures: 0, Errors: 0, Skipped: 0 

Aby zobaczyć, jak łatwo jest dodać pokrycie kodu do tej metody, sprawdź ten link.

//johndobie.blogspot.co.uk/2012/05/easy-unit-and-integration-code-coverage.html

Bardziej kompletny przykład, który używa startów Tomcat i bazy danych.

svn co //designbycontract.googlecode.com/svn/trunk/examples/maven/code-co... mvn clean install -Ptomcat-embedded 

Jest oparty na tym przykładzie

//johndobie.blogspot.com/2011/10/maven-integration-testing-and-spring.html

Ta historia, „Testy jednostkowe i integracyjne z kategoriami Maven i JUnit”, została pierwotnie opublikowana przez JavaWorld.