maven-surefire插件中的"默认测试"代表什么?

Pet*_*ter 8 testng maven-3 maven-surefire-plugin

我在我的pom中使用TestNg确定了以下配置:

<plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.12</version>
            <configuration>
                <skipTests>${skip-all-tests}</skipTests>
            </configuration>
            <executions>
                <execution>
                    <id>unit-tests</id>
                    <phase>test</phase>
                    <goals>
                        <goal>test</goal>
                    </goals>
                    <configuration>
                        <skip>${skip-unit-tests}</skip>
                        <groups>unit</groups>

                        <excludedGroups>integration</excludedGroups>
                    </configuration>
                </execution>
                <execution>
                    <id>integration-tests</id>
                    <phase>integration-test</phase>
                    <goals>
                        <goal>test</goal>
                    </goals>
                    <configuration>
                        <skip>${skip-integration-tests}</skip>
                        <groups>integration</groups>
                        <excludedGroups>unit</excludedGroups>
                    </configuration>
                </execution>
            </executions>
        </plugin>
Run Code Online (Sandbox Code Playgroud)

但似乎两次执行总是先于"默认测试"运行,它似乎运行每个@test注释方法(至少我认为是这样).

--- maven-surefire-plugin:2.12:test (default-test) @ my-project
Run Code Online (Sandbox Code Playgroud)

例如,在项目上运行"mvn test",就会发生两次测试."默认测试"和"单元测试".

有人可以向我解释一下吗?这可以被禁用或控制(配置什么是测试的,什么不是)?

Ste*_*lly 17

人们希望有办法覆盖Maven中默认的插件内置执行.

Maven 3(或者它可能早在2.1.0或2.2.0中引入)通过为包装的生命周期中添加到有效pom的每个插件执行定义默认执行ID来解决这个问题.

这个隐式ID的名称总是default-_____让我无法回想起为它生成的确切规则.

因此,您可以通过定义匹配的执行来覆盖包装的注入执行.

为了解决你的情况我想要么改变<id>unit-tests</id><id>default-test</id>或增加

            <execution>
                <id>default-test</id>
                <configuration>
                    <skip>true</skip>
                </configuration>
            </execution>
Run Code Online (Sandbox Code Playgroud)

要么具有相同的效果, <id>unit-tests</id><id>default-test</id> 解决方案会稍微提高性能,因为你只需要调用两次surefire执行.

我要指出的另一件事是你可能会更好地使用maven-failsafe-plugin来执行集成测试,因为在某些时候你可能想要在集成测试之前和之后做一些事情,而failafe就是为此而设计的.用例(尽管进一步向下切换应该是微不足道的)


小智 5

作为斯蒂芬的解决方案的替代方案,如果您不希望在日志中显示以下消息(实际上这有点误导,因为您没有跳过测试):

[INFO] --- maven-surefire-plugin:2.22.2:test (default-test) @ service-template ---
[INFO] Tests are skipped.
Run Code Online (Sandbox Code Playgroud)

...然后走这条路:

                <execution>
                    <id>default-test</id>
                    <phase>none</phase>
                </execution>
Run Code Online (Sandbox Code Playgroud)