1

我是 maven 和 junit 的新手,所以请多多包涵:-)

我创建了一个示例 maven 项目,其中包含 src/test/java 中的一个简单测试,如下所示

public class AssertUnitTest {
    @Test
    public void massageTest(){  
        Assert.assertEquals("abc", "abd");
    }
}

当我从 Eclipse 运行测试时,测试失败说预期是 abc 但找到 abd。当我使用终端运行相同的内容时,它说 BUILD FAILURE

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running com.assertpackage.AssertUnitTest
Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 0.055 sec <<< FAILURE!

Results :

Failed tests: 
  messageTest(com.assertpackage.AssertUnitTest): expected:<ab[c]> but was:<ab[d]>

Tests run: 1, Failures: 1, Errors: 0, Skipped: 0

[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.712s
[INFO] Finished at: Fri Sep 13 11:36:12 GMT+05:30 2013
[INFO] Final Memory: 9M/81M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-   plugin:2.7.2:test (default-test) on project AssertProject: There are test failures.
[ERROR] 
[ERROR] Please refer to /Users/support/Documents/Omniture_Selenium_Project/AssertProject  /target/surefire-reports for the individual test results.
[ERROR] -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException

这个错误是什么以及如何解决它并使 BUILD SUCCESS

4

6 回答 6

3

标准的 maven-build 将运行在 src/test/java 中找到的所有测试,如果其中一个失败(如您的示例测试),则构建将失败。

因此,要使构建成功,您必须通过所有测试。

于 2013-09-13T06:16:43.847 回答
2

Maven 使用插件的test目标surefire默认运行所有单元测试,即使一个测试失败也会失败。控制台输出几乎是这样说的:

Failed to execute goal org.apache.maven.plugins:maven-surefire-   plugin:2.7.2:test (default-test) on project AssertProject: There are test failures.

如果目标未能执行,则结果是构建失败。

所以,暂时不要让你的测试失败或跳过测试(不推荐)。

于 2013-09-13T06:17:00.833 回答
1

Surefire 插件有一个testFailureIgnore参数,启用后,测试失败时不会导致构建失败。

您可以在命令行中添加它:

mvn install -Dmaven.test.failure.ignore=true

归功于@PascalThivent

或者你可以将它直接烘焙到你的 pom.xml 中:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>${surefire.plugin.version}</version>
    <configuration>
        <!-- Build, even if tests fail -->
        <testFailureIgnore>true</testFailureIgnore>
    </configuration>
</plugin>

请注意,这不会像其他人建议的那样阻止测试运行。测试正常运行,并且仍然生成所有报告。使用此设置,不再需要通过所有测试来构建项目。因此,我倾向于在我的所有 pom 中包含这个 Surefire 配置。

于 2013-09-22T13:11:01.777 回答
1

在构建过程中,某个单元测试失败。您可以通过添加 ff 参数来跳过测试-Dmaven.test.skip

于 2013-09-22T13:16:17.977 回答
0

Maven 构建生命周期包含运行属于项目的所有 jUnit 测试的 TEST 阶段。如果测试失败,构建生命周期也会失败。这是可取的行为,因为您不想发布未通过测试的应用程序。

您可以通过编写将通过 TEST 阶段(预期行为)的测试来修复它,或者您可以使用 maven 参数 -DskipTests 构建应用程序,这将跳过生命周期的 TEST 阶段。

* 编辑 *

我还建议您查看有关 Maven 构建生命周期的文档。

于 2013-09-13T06:19:59.973 回答
0

Maven 提出了三种不同的方法来管理反应器构建中的故障fail-fastfail-at-endfail-never.

默认方式是fail fast,它会在第一个失败的项目后停止反应堆构建。BUILD SUCCESSFUL尽管测试失败,您可以尝试策略fail-at-end(使用--fail-at-end(或仅-fae)参数。

通过:掌握 Maven 命令行——管理故障

于 2013-09-13T06:22:39.323 回答