我是maven和junit的新手所以请耐心等待: - )
我创建了一个示例maven项目,其中包含src / test / java中的一个简单测试作为folows
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
答案 0 :(得分: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.
如果目标无法执行,则结果是构建失败。
因此,只需让您的测试不失败或skip tests for now(不推荐)。
答案 1 :(得分:1)
标准的maven-build将运行src / test / java中的所有测试,如果其中一个失败(如你的example-test),则构建将失败。
因此,为了使构建成功,您必须通过所有测试。
答案 2 :(得分:1)
Surefire插件有一个testFailureIgnore
参数,启用后,在测试失败时不会导致构建失败。
您可以在命令行中添加它:
mvn install -Dmaven.test.failure.ignore=true
或者你可以把它直接放到你的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>
请注意,这并不会像其他人建议的那样阻止测试运行。测试按正常运行,所有报告仍然生成。使用此设置,不再需要所有测试都通过项目构建。因此,我倾向于在我的所有poms中包含这个Surefire配置。
答案 3 :(得分:1)
在构建过程中,某个单元测试失败。您可以通过添加ff参数-Dmaven.test.skip
答案 4 :(得分:0)
Maven构建生命周期包含TEST阶段,该阶段运行属于项目的所有jUnit测试。如果测试失败,构建生命周期也会失败。这是理想的行为,因为您不希望发布未通过测试的应用程序。
您可以通过编写将通过TEST阶段(预期行为)的测试来修复它,或者您可以使用maven参数-DskipTests构建应用程序,这将跳过生命周期的TEST阶段。
*编辑*
我还建议您查看关于maven构建生命周期的Docs。
答案 5 :(得分:0)
Maven提出了三种不同的方法来管理反应堆构建中的失败:fail-fast
,fail-at-end
和fail-never
。
默认方式是fail fast
,它会在第一个失败的项目之后停止反应堆构建。要在考试失败的情况下BUILD SUCCESSFUL
,您可以尝试fail-at-end
政策(使用--fail-at-end
(或仅-fae
)参数。