Spring maven - 运行特定测试(通过注释或maven配置文件)

时间:2017-11-07 15:46:05

标签: java maven junit

使用Spring maven上下文,我想基于maven配置文件运行特定的测试。我想有一个标记测试组的简单方法。如果可能,我想使用注释。 有哪些选项,如maven命令行参数,maven配置文件规范等。

说我有以下测试:

示例:

// annotation("integration")
public class GeopointFormatterTest {
    @Test
    public void testIntegration1() {  ...  }   
    @Test
    public void testIntegration2() {  ...  }

@Profile(用于创建bean)和@ActiveProfile(用于选择创建bean的特定配置文件)等注释当然不能用于选择测试。所有测试都只针对以下语句运行:

  

mvn clean install -Pdevelopment

     

mvn clean install -Pdevelopment -Dspring.profiles.active = acceptance

     

mvn clean install -Pdevelopment -Dspring.profiles.active = integration

正如所建议的那样,我也使用了@IfProfileValue。这是根据系统属性值选择测试的好方法。 CustomProfileValueSource类可以推翻系统属性值,如:@ProfileValueSourceConfiguration(CustomProfileValueSource.class)

编辑和替代

下面的GREAT答案主要关注JUnit的@Category机制。谢谢大家!

另一种方法是通过以下步骤:[1]在maven配置文件中设置属性,[2]使用该属性通过标准的surefire测试插件跳过测试。

[1]通过个人资料设置属性:

<profiles>
    <profile>
        <id>integrationtests</id>
        <properties>
            <integration.skip>false</integration.skip>
            <acceptance.skip>true</acceptance.skip>
        </properties>
    </profile>
    ... other profiles

[2]使用surefire测试插件中的属性跳过测试。

<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 个答案:

答案 0 :(得分:14)

看看junit categories

您使用特定的类别注释标记您的测试

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

另请注意,如果您不想在套件类中手动指定单元测试用例类,则还可以使用ClasspathSuite的帮助,然后根据类别进行限制。

答案 1 :(得分:1)

我们在以下步骤中解决了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)使用您想要的类别标记单元测试用例



    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

运行命令

答案 2 :(得分:1)

您可能需要使用@Category注释对测试进行分类。提供的Surefire文档中提供了一个完整的示例here - 搜索字符串使用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

答案 3 :(得分:0)

您可以使用此标志指定配置文件:

mvn test -Dspring.profiles.active=acceptance

在我的最新项目中,我有一个“集成”配置文件,用于对嵌入式H2数据库运行集成测试。

答案 4 :(得分:0)

根据一些帖子的答案,我创建了一个simple test project,展示了一些代码质量&amp;测试功能:

  • 使用插件执行单元测试或集成测试 Surefire Failsafe
  • 通过插件 findbugs 提高代码质量。
  • 使用插件 Jacoco 确定测试覆盖率统计信息。

享受!