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.

наслаждайтесь!