当前位置: 首页 > 知识库问答 >
问题:

如何确保在使用Maven进行失败的jUnit测试后进行清理?

郎鸿
2023-03-14

我在这里看到了:在Maven/Surefire中,什么是清理单元测试后的好方法,无论测试是否通过?但这帮不了我。我可能错误地配置了failsafe和/或surefire。

我已经将jUnit声明为依赖项

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>${junit.version}</version>
    <scope>test</scope>
</dependency>

我在构建中有故障安全插件:

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-failsafe-plugin</artifactId>
        <version>2.20</version>
        <!--
        <configuration>
            <skipITs>true</skipITs>
        </configuration>
        -->
        <executions>
            <execution>
                <id>run-nonautowired-tests</id>
                <phase>integration-test</phase>
                <goals>
                    <goal>integration-test</goal>
                    <goal>verify</goal>
                </goals>
                <configuration>
                    <includes>
                        <include>*Test.java</include>
                    </includes>
                </configuration>
            </execution>
        </executions>
    </plugin>

我没有任何遵循*IT命名约定的集成测试,只有遵循*Test命名约定的jUnit测试。我只是试图使用故障安全作为一种方法来确保我的清理完成。我试过船长是真的,我试过评论这一点。我已经尝试过使用和不使用配置includes。

    <!--
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.19.1</version>
        <configuration>
            <skipTests>true</skipTests>
        </configuration>
    </plugin>
    -->

我是在IntelliJ14.1.5中执行此操作的,但是将Maven生命周期运行到验证阶段,而不是让IntelliJ直接运行jUnit测试

此外,它似乎是可靠的2.12.4运行默认测试,我不知道这是从哪里来的。

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.12.4:test (default-test) on project RefRange: There are test failures.

我应该从哪里看2.12.4来自哪里?我如何才能让它运行一次jUnit测试,并在失败的情况下继续到下一个阶段?

<skip>false</skip>
<skipTests>true</skipTests>

对其配置,将故障安全包括更改为

<includes>**/*Test.java</includes>,

运行mvn verify-X,在故意测试失败后,我立即得到以下结果:

[INFO] Results:
[INFO]
[ERROR] Failures:
[ERROR]   ref_range_by_RTest.testGetConfigManager:56
    Expected: is "C:\Program Files (x86)\Apache Software Foundation\Apache Tomcat 8.0.27/app_rsrcs/refrange/data"
         but: was "C:\Program Files (x86)\Apache Software Foundation\Apache Tomcat 8.0.27/app_rsrcs/refrange/data-not"
[INFO]
[ERROR] Tests run: 5, Failures: 1, Errors: 0, Skipped: 0
[INFO]
[WARNING] File encoding has not been set, using platform encoding Cp1252, i.e. build is platform dependent! The file encoding for reports output files should be provided by the POM property ${project.reporting.   outputEncoding}.
[INFO]
[INFO] --- maven-failsafe-plugin:2.20:verify (run-nonautowired-tests) @ RefRange ---
[DEBUG] Configuring mojo org.apache.maven.plugins:maven-failsafe-plugin:2.20:verify from plugin realm ClassRealm[plugin>org.apache.maven.plugins:maven-failsafe-plugin:2.20, parent: sun.misc.Launcher$AppClassLoader@647e05]
[DEBUG] Configuring mojo 'org.apache.maven.plugins:maven-failsafe-plugin:2.20:verify' with basic configurator -->
[DEBUG]   (s) basedir = C:\Git\clincor-clindev\refrange
[DEBUG]   (s) reportsDirectory = C:\Git\clincor-clindev\refrange\target\failsafe-reports
[DEBUG]   (s) skip = false
[DEBUG]   (f) summaryFile = C:\Git\clincor-clindev\refrange\target\failsafe-reports\failsafe-summary.xml
[DEBUG]   (s) testClassesDirectory = C:\Git\clincor-clindev\refrange\target\test-classes
[DEBUG]   (s) testFailureIgnore = false
[DEBUG]   (f) session = org.apache.maven.execution.MavenSession@2eef62
[DEBUG] -- end configuration --
[DEBUG] Failsafe report directory: C:\Git\clincor-clindev\refrange\target\failsafe-reports
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 11.976 s
[INFO] Finished at: 2017-05-17T20:54:09-07:00
[INFO] Final Memory: 17M/247M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-failsafe-plugin:2.20:verify (run-nonautowired-tests) on project RefRange: There are test failures.
[ERROR]
[ERROR] Please refer to C:\Git\clincor-clindev\refrange\target\failsafe-reports for the individual test results.
[ERROR] Please refer to dump files (if any exist) [date]-jvmRun[N].dump, [date].dumpstream and [date]-jvmRun[N].dumpstream.
[ERROR] -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-failsafe-plugin:2.20:verify (run-nonautowired-tests) on project RefRange: There are test failures.

共有1个答案

仲霍英
2023-03-14

当前,Failsaf:Verify绑定到Integration-Test阶段:

<executions>
    <execution>
    <id>run-nonautowired-tests</id>
    <phase>integration-test</phase>
    <goals>
        <goal>integration-test</goal>
        <goal>verify</goal>
    </goals>
    <configuration>
        <includes>
            <include>*Test.java</include>
        </includes>
    </configuration>
    </execution>
</executions>

failsafe将在post-integration-test清理之前导致失败。

尝试从Integration-Test阶段移除 verify 。如果需要,可以为verify阶段创建单独的执行。

更新:考虑在插件本身而不是在执行中声明配置属性:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-failsafe-plugin</artifactId>
    <version>2.20</version>
    <configuration>
        <includes>**/*Test.java</includes>
    </configuration>
    ...

这样,您可能会省略故障安全插件显式声明的执行。

 类似资料:
  • 问题内容: 在我的项目中,我必须在所有测试之前进行一些存储库设置。这是使用一些棘手的静态规则完成的。但是,在所有测试之后,我不知道如何进行清理。我不想保留一些不可思议的静态数字来引用所有测试方法的编号,我应该一直保持这种状态。 最受赞赏的方法是添加一些将在所有测试后调用的侦听器。JUnit4中已经有用于它的任何接口吗? 编辑:这与@BeforeClass和@AfterClass无关,因为我必须知道

  • ...还有一个很简单的测试... 如果我在IntelliJ中运行这个,测试就会运行并失败。 如果我提交这个项目并将其推送到github,TeamCity会看到变化并开始构建。生成会很快失败,出现以下错误:

  • 问题出现在字段中。 在JUnit4中,一切都工作得很好,没有错误。我试图使用JUnit4中的,因为我在pom.xml中有一个junit-vintage-engine依赖项,但没有帮助。

  • 我有这个过滤器类,在使用junit进行测试时需要尽可能高的代码覆盖率。 和测试等级: 当我运行时,它在 线 我如何避免这种情况? 我需要调用这个方法并执行里面的任何内容来提供所需的代码覆盖。

  • 我注意到,有时在Jenkins上运行maven构建时,运行的Jbehave测试的数量会因运行的不同而不同。在分析日志时,我看到以下代码段: 问题是,当跳过测试或以这种方式运行失败时,构建仍然被视为成功。 是否有maven surefire插件配置,可以确保在测试失败时运行构建会导致失败?以下是maven surefire构建配置

  • 我花了相当长的时间试图找出解决我问题的办法,但毫无结果。 无论如何,我有一堆集成测试(在一个与标准测试目录并行的非标准目录testRegression中)。 这些集成测试使用内存数据库中的h2。在生产和测试中,我使用liquibase来模拟模式演变。 我的属性(在应用程序testregion.properties中)如下所示: 我一直得到的错误是: 那么我该如何回避这个问题呢?我的基本理解是,每个