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

2022-09-02 01:19:02

使用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 全新安装 – Pintegrationtests


答案 1

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

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


答案 2

您可能需要使用注释对测试进行分类。此处提供的文档提供了一个完整的示例 - 使用 JUnit 类别搜索字符串。@CategorySurefire

假设您已经相应地对测试进行了分类,您现在可以在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

推荐