Spring maven-запуск определенных тестов (через аннотации или профиль maven)
используя контекст Spring maven, я хотел бы запустить определенные тесты на основе профиля maven. Я хотел бы иметь простой способ пометить тестовые группы. Если возможно, я хотел бы использовать аннотации. Какие параметры существуют, например параметры командной строки maven, спецификация профилей maven и т. д.
скажем, у меня есть следующие тесты:
пример:
// annotation("integration")
public class GeopointFormatterTest {
@Test
public void testIntegration1() { ... }
@Test
public void testIntegration2() { ... }
аннотации, такие как @Profile (который предназначен для создания бобов) и @ActiveProfile (который для выбора конкретных профилей для создания бобов) не может использоваться для выбора тестов, конечно. Все тесты просто запускаются для таких операторов, как:
mvn чистая установка-Pdevelopment
mvn чистая установка-Pdevelopment-Dspring.профили.активный=принятие
mvn чистая установка-Pdevelopment-Dspring.профили.активный=интеграция
как было предложено, я также использовал @IfProfileValue. Это хороший способ выбора тестов на основе о значениях системных свойств. Значения системных свойств могут быть отменены классом CustomProfileValueSource, например: @ProfileValueSourceConfiguration (CustomProfileValueSource.класс)
редактировать и альтернатива
большие ответы ниже сосредоточены на механизме @Category JUnit. Спасибо всем!
другой подход заключается в следующих шагах: [1] Установите свойство в профиле maven и [2] используйте свойство, чтобы пропустить тесты через стандарт верный тестовый плагин.
[1] Настройка свойств через профиль:
<profiles>
<profile>
<id>integrationtests</id>
<properties>
<integration.skip>false</integration.skip>
<acceptance.skip>true</acceptance.skip>
</properties>
</profile>
... other profiles
[2] использование свойств плагина surefire test для пропуска тестов.
<build>
<plugins>
<plugin>
<!-- Run the integration test-->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${surefire.plugin.version}</version>
<configuration>
<skipTests>${acceptance.skip}</skipTests>
запуск в maven: mvn clean install-Pintegrationtests
5 ответов
посмотри junit категории.
вы бы пометить свои тесты с конкретными аннотациями категории
public interface FastTests { /* category marker */ }
public interface SlowTests { /* category marker */ }
@Category(SlowTests.class)
public class A {
@Test public void a() {}
}
затем сформировать набор, как
@RunWith(Categories.class)
@IncludeCategory({FastTests.class})
@SuiteClasses({A.class, B.class})
public static class FastTestSuite {
//
}
а затем запустите его с
mvn -Dtest=FastTestSuite test
Также обратите внимание, что если вы не хотите вручную указывать классы единичных тестов в классе suite, вы также можете использовать справку ClasspathSuite а затем просто ограничить на основе категорий.
мы решили категоризацию junit в следующих шагах.
Я создал проект на GitHub. https://github.com/djaganathan/unit-test-samples
предостережение: - пакеты классификации Junit по-прежнему говорят как экспериментальные.
1) создана категория интерфейсов
/**
* This interface used to categories Junit Test
* those Tests will be executed during bamboo build run
*/
public interface ReleaseTest {
}
2) с тегами блок testcases с категории
import org.junit.Test;
import org.junit.experimental.categories.Category;
import org.junit.internal.runners.JUnit4ClassRunner;
import org.junit.runner.RunWith;
import com.github.djaganathan.unit.test.category.ReleaseTest;
@RunWith(JUnit4ClassRunner.class)
public class GeneralTest {
@Test
@Category(value={ReleaseTest.class})
public void doTestForRelease(){}
@Test
public void doTestForDev(){}
}
3) создайте профиль в maven и прикрепитесь к это
4) выполнить команду mvn test -PreleaseTest
вам, вероятно, нужно будет классифицировать свои тесты с помощью @Category
Примечание. Полный пример приведен в Surefire
документация здесь - поиск строки Использование Категорий JUnit.
предполагая, что вы классифицировали свои тесты соответственно, теперь вы сможете настроить один или несколько профилей в своей сборке maven, которая запустит эти тесты в соответствии с категорией
<profiles>
<profile>
<id>slow-tests</id>
<build>
<plugins>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.11</version>
<configuration>
<groups>com.mycompany.SlowTests</groups>
</configuration>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>fast-tests</id>
<build>
<plugins>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.11</version>
<configuration>
<groups>com.mycompany.FastTests</groups>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>
вы можете указать один или дополнительные профили в командной строке при выполнении тестов.
mvn test -Pslow-tests,fast-tests
вы можете указать профиль с этим флагом:
mvn test -Dspring.profiles.active=acceptance
в моем последнем проекте у меня есть профиль" интеграция", который я использую для запуска интеграционных тестов со встроенной базой данных H2.
основываясь на ответах ряда сообщений, я создал простой тестовый проект это демонстрирует ряд характеристик качества кода и тестирования:
- выполнение модульных тестов или интеграционных тестов с плагинами верный и ФС.
- улучшение качества кода с помощью плагина в FindBugs.
- определите статистику покрытия теста с помощью плагина Jacoco.
наслаждайтесь!