Тестове за единица и интеграция с категории Maven и JUnit

Този пример показва как да разделяте модулни и интеграционни тестове, като използвате категории Maven и JUnit.

Той е особено полезен за съществуващи тестови пакети и може да бъде реализиран за минути.

Предишната ми публикация показа как да използваме Maven профил за разделяне на модулни и интеграционни тестове.

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

Това беше много добре прочетена публикация и ми харесва как използва отделни директории. Този пример обаче показва много по-опростена техника, която лесно може да се приложи към наследените тестови пакети.

Той предлага повечето предимства на оригинала и седи по-удобно в света на Maven.

Кодът за примера е тук.

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

От JUnit 4.8 можете да определите свои собствени категории за тестове. Това ви позволява да маркирате и групирате тестове.

Този пример показва колко лесно е да отделите единичен и интеграционен тест с помощта на анотацията @Catgegory.

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

Първата стъпка при групирането на тест с използване на категории е създаването на интерфейс за маркер.

Този интерфейс ще се използва за маркиране на всички тестове, които искате да стартирате като интеграционни тестове.

public interface IntegrationTest {} 

Добавете анотацията на категорията в горната част на тестовия ви клас. Той взема името на новия ви интерфейс.

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

Категориите могат да се използват за маркиране на класове или методи. Наистина според мен трябва да маркирате само клас.

Ако имате както единични, така и интеграционни тестове в един клас, тогава го разделете.

Красотата на това решение е, че в действителност нищо не се променя за тестовата страна на нещата.

Просто добавяме някаква конфигурация към плъгина maven surefire, за да игнорираме всички тестове за интеграция.

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

Има 2 много важни части. Първият е да конфигурирате сигурната защита, за да изключите всички тестове за интеграция.

com.test.annotation.type.IntegrationTest 

Surefire ще изпълнява всичките ви тестове, с изключение на тези, маркирани като интеграционен тест.

Другата важна част е да се уверите, че надеждният плъгин използва правилния доставчик на JUnit. Доставчикът на JUnit47 е необходим за правилно откриване на категориите.

  org.apache.maven.surefire surefire-junit47 2.12   

За да сме сигурни, че това работи правилно, можем да стартираме модулните тестове

mvn clean test 

От изхода по-долу можете да видите, че се изпълнява единичен тест, но не и тест за интеграция.

------------------------------------------------------- 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] ------------------------------------------------------------------------ 

Отново конфигурацията за това е много проста.

Ние използваме стандартния плъгин за безопасност и го конфигурираме да изпълнява само тестове за интеграция.

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

Конфигурацията използва стандартна цел за изпълнение, за да стартира приставката за безопасност по време на фазата на тестване на интеграцията на компилацията.

Следващата конфигурация гарантира, че се изпълняват само тестовете за интеграция.

com.test.annotation.type.IntegrationTest 

И отново доставчикът на JUnit трябва да бъде правилно конфигуриран.

  org.apache.maven.surefire surefire-junit47 2.12   

Това е!

Вече можем да изпълним цялата компилация.

mvn clean install 

Този път, както и текущият модулен тест, интеграционните тестове се изпълняват по време на фазата на интеграционния тест.

------------------------------------------------------- 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 

За да видите колко лесно е да добавите покритие на код към този метод, разгледайте тази връзка.

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

За по-пълен пример, който използва стартира Tomcat и база данни.

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

Основава се на този пример

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

Тази история „Тестове за единици и интеграция с категории Maven и JUnit“ първоначално е публикувана от JavaWorld.