6

我正在使用 maven surefire 插件来执行我的应用程序的 junit 测试。

我想在第一次失败或错误后停止执行。在我的情况下,这些是修改应用程序状态的集成测试,所以我需要知道失败后的确切系统状态(我们有一个奇怪的问题,如果单独执行测试通过,但如果与整个套件一起执行则不会)。

是否可以?我在这里的插件文档中找不到选项。

4

2 回答 2

7

实际上,事实证明这与 maven-surefire-plugin 是不可能的。

我在这里找到了答案。

我实际上最终使用了@mhaller 提出的解决方案

所以我实现了一个这样的junit监听器:

package br.com.xpto;

import org.junit.runner.Description;
import org.junit.runner.notification.Failure;
import org.junit.runner.notification.RunListener;

import br.com.caelum.brutal.integration.scene.AcceptanceTestBase;

public class FailFastListener extends RunListener {

    public void testFailure(Failure failure) throws Exception {
        System.err.println("FAILURE: " + failure);
        AcceptanceTestBase.close();
        System.exit(-1);
    }

    @Override
    public void testFinished(Description description) throws Exception {
        AcceptanceTestBase.close();
        System.exit(-1);
    }
}

并像这样配置 maven-surefire:

<plugin>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.10</version>
    <executions>
        <execution>
            <id>surefire-integration</id>
            <phase>integration-test</phase>
            <goals>
                <goal>test</goal>
            </goals>
            <configuration>
                <excludes>
                    <exclude>none</exclude>
                </excludes>
                <includes>
                    <include>**/scene/**/*Test.java</include>
                </includes>
                <forkMode>once</forkMode>
                <properties>
                    <property>
                        <name>listener</name>
                        <value>br.com.caelum.brutal.integration.util.FailFastListener</value>
                    </property>
                </properties>
            </configuration>
        </execution>
    </executions>
    <configuration>
        <excludes>
            <exclude>**/*</exclude>
        </excludes>
    </configuration>
</plugin>
于 2013-04-05T17:45:10.943 回答
1

首先对于集成测试,您应该使用maven-failsafe-plugin不是maven-surefire-plugin。

此外,如果您有失败的集成测试,这通常是在 CI 环境中完成的。之后,您可以通过以下方式运行失败的集成测试

mvn -Dit.test=NameOfTheFailedIntegrationTest verify

分别地。

于 2013-04-05T17:18:59.643 回答