当前位置:  开发笔记 > 运维 > 正文

使用maven surefire插件有没有办法让junit"快速失败"?

如何解决《使用mavensurefire插件有没有办法让junit"快速失败"?》经验,为你挑选了3个好方法。

我目前正在使用maven开发一个java项目.我们使用maven surefire插件来运行我们的junit套件作为构建过程的一部分.

我们的测试套件在覆盖范围和执行时间都在快速增长.当您在测试的第一分钟内等待十分钟以发现测试失败时,执行时间非常令人沮丧且耗时.

我想找到一种方法,使构建过程在测试套件中的第一个错误/失败时失败.我知道这对于其他构建工具是可行的,但是我一直无法找到使用maven surefire来做到这一点的方法.

我知道在surefire jira 中有一个未解决的此功能的票证,但我希望有一个现有的解决方案.



1> Captain Man..:

截至2015年9月6日,似乎有,-Dsurefire.skipAfterFailureCount=1.

截至2015年10月19日,版本2.19已发布.



2> Pascal Thive..:

据我所知,,这确实需要SUREFIRE-580的解决方案.如果你想更快地实现这一点,你至少应该投票支持这个问题,并且可以选择提交补丁;)



3> mhaller..:

可能有一个合适的解决方法,但这取决于您的要求,您需要使用可以处理jvm进程返回码的CI服务器.

基本思想是完全停止Maven的JVM进程,并让操作系统知道进程已意外停止.然后,像Jenkins/Hudson这样的持续集成服务器应该能够检查非零退出代码并让您知道测试失败了.

第一步是确保在第一次测试失败时退出JVM.您可以使用自定义RunListener(将其放在src/test/java中)使用JUnit 4.7或更高版本执行此操作:

package org.example
import org.junit.runner.notification.Failure;
import org.junit.runner.notification.RunListener;
public class FailFastListener extends RunListener {
        public void testFailure(Failure failure) throws Exception {
                System.err.println("FAILURE: " + failure);
                System.exit(-1);
        }
}

然后,您需要配置该类,以便surefire将其注册到JUnit 4 Runner.编辑pom.xml并将listener配置属性添加到maven-surefire-plugin.您还需要配置surefire以不分叉新的JVM进程来执行测试.否则,它将继续下一个测试用例.


    org.apache.maven.plugins
    maven-surefire-plugin
    2.10
    
        never
        
            
                listener
                org.example.FailFastListener
            
        
    

如果这没有帮助,我会尝试分叉maven surefire junit提供程序插件.

顺便说一下,根据定义,单元测试的运行速度应该超过0.1秒.如果您的构建由于单元测试确实需要很长时间,那么将来必须使它们运行得更快.


优秀的解决方 顺便说一句,看起来像 never 限制可以通过使用-ff选项运行maven来放宽.在System.exit()之后,surefire会立即中止构建,并显示一条消息"目标org.apache.maven.plugins:maven-surefire-plugin:2.16:测试失败:分叉的虚拟机终止而没有说再见.虚拟机崩溃或系统崩溃.出口叫?"
推荐阅读
携手相约幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有