首页 / 知识
关于Java:jUnit 4.x中Suite执行之前和之后的挂钩
2023-04-16 13:41:00

Before and After Suite execution hook in jUnit 4.x我正在尝试使用jUnit 4.4执行一组集成测试的设置和拆卸。 拆卸需要可靠地运行。 我在使用TestNG时遇到其他问题,因此我希望移植回jUnit。 在运行任何测试之前以及在完成所有测试之后,可以使用哪些挂钩执行?
注意:我们正在使用Maven 2进行构建。 我已经尝试过使用maven的 是的,可以在测试套件中进行任何测试之前和之后可靠地运行设置和拆卸方法。让我用代码演示:
因此,您的Test1类看起来像:
...并且您可以想象Test2看起来很相似。如果运行TestSuite,您将获得:
因此,您可以看到设置/拆卸仅分别在所有测试之前和之后运行。 要点:仅当您运行测试套件,而不是将Test1和Test2作为单独的JUnit测试运行时,此方法才有效。您提到您正在使用maven,并且maven surefire插件喜欢单独运行测试,而不是套件的一部分。在这种情况下,我建议创建一个每个测试类都可以扩展的超类。然后,超类包含带注释的@BeforeClass和@AfterClass方法。尽管不如上面的方法那么干净,但我认为它将为您服务。 至于失败测试的问题,可以设置maven.test.error.ignore,以便在失败测试中继续构建。不建议您将其作为持续的实践,但是在所有测试通过之前,它应该可以使您正常运行。有关更多详细信息,请参见maven surefire文档。 我的一位同事建议以下内容:您可以使用自定义RunListener并实现testRunFinished()方法:http://junit.sourceforge.net/javadoc/org/junit/runner/notification/RunListener.html#testRunFinished(org。 junit.runner.Result)
要注册RunListener,只需配置surefire插件,如下所示:
故障安全插件也应选择此配置。 您可以在JUnit 4.9+中使用@ClassRule批注,如我在回答另一个问题中所述。 使用注释,您可以执行以下操作:
在这里,我们
如果您所有的测试都可以扩展"技术"类并且在同一包中,则可以做一些技巧:
请注意,此解决方案有很多缺点:
有关信息:listClassesIn()=>如何在Java中找到给定类的所有子类? 至于"注意:我们正在使用maven 2进行构建。我尝试使用maven的集成前和集成后测试阶段,但是,如果测试失败,则maven会停止并且不会运行集成后测试,这没有帮助。" 您可以尝试使用故障安全插件,我认为它具有确保清除的功能,而不论安装程序或中间阶段的状态如何 如果您不想创建套件,而不必列出所有测试类,则可以使用反射来动态查找测试类的数量,并在基类@AfterClass中递减计数,仅执行一次一次tearDown:
如果您更喜欢使用@BeforeClass而不是静态块,则还可以使用布尔标志进行反射计数并在第一次调用时仅测试一次设置。 希望这对某人有帮助,我花了一个下午才找到一种比枚举套件中所有班级更好的方法。 现在,您需要做的就是为所有测试类扩展此类。 我们已经有一个基类为所有测试提供一些通用的东西,因此这对我们来说是最佳的解决方案。 灵感来自这个SO答案https://stackoverflow.com/a/37488620/5930242 如果您不想将此类扩展到任何地方,那么最后一个SO答案可能会满足您的要求。 由于maven-surefire-plugin不会先运行套件类,而是将套件和测试类相同,因此我们可以按以下方式配置插件,以仅启用套件类并禁用所有测试。 Suite将运行所有测试。
我认为然后获得所需功能的唯一方法是做类似
我在eclipse中使用类似的东西,所以我不确定它在该环境之外的便携性 据我所知,在JUnit中没有执行此操作的机制,但是您可以尝试对Suite进行子类化,并使用确实提供钩子的版本覆盖run()方法。 |
最新内容
相关内容
linux运行图形界命令?
linux运行图形界命令?,系统,密码,地址,电脑,图形界面,地方,工具,界面,终端,图形,linux图形化界面命令第一种方式比较简单,只需要选择相应的带图linux怎样运行命令?
linux怎样运行命令?,系统,工作,信息,基础,地址,命令,目录,工具,密码,一致,Linux系统基础操作指令1、linux常用命令有pwd命令、cd命令、ls命令linux设置命令行长度?
linux设置命令行长度?,系统,工作,信息,地址,命令,工具,异常,管理,目录,文件,linux日志显示长度,设置命令tail -n 1000:显示最后1000行 tail -nlinux执行多次命令?
linux执行多次命令?,系统,信息,标准,工作,情况,命令,周期性,服务,代码,时间,linux系统能把很多命令一起执行,然后结果输出一个文件吗?就是scrilinux编译完运行命令?
linux编译完运行命令?,系统,代码,环境,工具,信息,命令,文件,程序,终端,编辑,在linux中编译C输入完程序后输入个:wq然后按什么键就然后就回到了linux命令程序运行?
linux命令程序运行?,状态,系统,服务,情况,命令,进程,软件,数据,发行,时间,Linux中如何启动进程?进程调度命令有哪些?实现调度启动进程的方法有linux设置代替命令?
linux设置代替命令?,系统,地址,网络,工作,软件,工具,服务,信息,命令,别名,linux系统怎样设置命令别名可将设置别名的命令写进启动文件内,这样,每linux并行化执行命令?
linux并行化执行命令?,系统,工具,信息,命令,名称,网络,管理,首页,服务,暂停,Linux多台主机批量执行命令1、执行命令(记得先对doCommand.s h增加linux命令设置时区?
linux命令设置时区?,时间,系统,国家,大陆,命令,时区,时钟,日期,指令,时分,linux系统修改系统时间与时区的方法有哪些inux修改时间命令是date-s如何执行linux命令?
如何执行linux命令?,单位,系统,网络,信息,权威,命令,文件,音乐,目录,选项,mv什么意思呢?1、MV就是音乐短片(Music Video),是指与音乐(通常大部分是linux运行脚本命令?
linux运行脚本命令?,系统,代码,服务,文件,工具,平台,网站,脚本,命令,方法,Linux配置开机自启动执行脚本有哪些方法方法1:执行ntsysv命令,然后在linux打断执行的命令?
linux打断执行的命令?,系统,状态,网站,标准,通用,客服,人员,名字,网络,暂停,Linux停止命令继续执行的方法是什么它只是在进程中维持挂起的状态