在Eclipse和Ant中运行Junit测试时,我遇到了差异。这是场景:
Eclipse中的所有内容都按预期运行,但是,当我通过我编写的Ant构建脚本运行时,我无法获得准确的Junit报告。我对我们的测试运行器和测试用例进行了一些更改(简而言之,我将测试套件()方法添加到我的所有测试用例中),它返回一个新的Junit4TestAdapter,并让我们的自定义运行器执行RunNotifier.fireTestAssumptionFailed(Failure)而不是fireTestAssumption。现在一切都在Ant中运行良好,但在Eclipse中运行时,故障被标记为已通过。
是否有任何Eclipse文档可以准确解释它如何运行Junit测试?我基本上想知道Eclipse如何执行Junit测试,它是否直接通过Ant运行,如果它使用Java与Junit接口等等。如果有人知道这个问题的实际解决方案,我也欢迎,但我真的想尝试自己解决这个问题,我只需要一个正确的方向点。
答案 0 :(得分:17)
要首先回答您的问题,如果Ant junit和Eclipse JUnit之间存在差异,则可能是类路径或环境问题。最简单的方法是找到一个在两者之间执行不同的测试并打印出系统属性,然后从该方向开始工作。要尝试的另一件事是从Eclipse中运行ant脚本,看看这是否有所不同(因为环境会发生变化)
Eclipse不使用Ant来运行测试。
关于Eclipse如何运行JUnit测试,这里有一个快速概述。请注意:Eclipse JUnit插件中有一些深刻的魔法。
Eclipse有4个JUnit插件,默认情况下都安装在大多数配置中:
这些是实际CVS存储库的git镜像。上次我尝试使用它们时,它们没有编译,但它们会给你代码,你至少可以将项目导入Eclipse并查看它们。
如果我们忽略配置页面,插件如何创建运行配置,JUnit视图本身的代码以及它如何找到要运行的相关测试,我们可以专注于它如何运行测试。
核心课程为org.eclipse.jdt.junit.launcher.JUnitLaunchConfigurationDelegate
和org.eclipse.jdt.internal.junit.runner.RemoteTestRunner
。 JUnitLaunchConfigurationDelegate
读取启动配置并分叉将运行测试的JVM。这个新JVM的主要类是RemoteTestRunner
。要运行的测试作为参数传递给分叉的JVM,作为单个测试或作为临时文件中的测试列表,如果您在项目上执行Run as JUnit。如果您正在调试,可以通过选中运行配置中的Keep alive when debugging
复选框来保持这个新的JVM。在这种情况下,JVM将保持不变,现有测试的重新运行将通过套接字发送。
RemoteTestRunner
运行测试并通过套接字将结果传回Eclipse,然后Eclipse更新JUnit视图。其核心是org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference
,它运行测试(对于JUnit 4),org.eclipse.jdt.internal.junit4.runner.JUnit4TestListener
,这是这些测试的RunListener
。 JUnit4TestListener扩展RunListener
,但不覆盖testAssumptionFailure
,这可能是您的测试在Eclipse中传递的原因。 RunListener.testAssumptionFailure
是一个空方法,它不执行任何操作,因此您的通知将被忽略。
我首先要克隆git repos,将项目导入Eclipse并尝试完成代码。
答案 1 :(得分:2)
下载Eclipse的插件开发工具(PDT)。
启动插件项目并将 org.eclipse.jdt.internal.junit.runner 和 org.eclipse.jdt.junit.core 添加到plugin.xml的依赖项中
探索这些课程,您将了解JUnit的启动方式。它根本不使用Ant。
要了解如何标记失败并操纵报告,您应该查看 org.eclipse.jdt.internal.junit4.runtime ,确认您使用的是JUnit 4.
总之,如果你想改变Eclipse的JUnit的工作方式,请准备花一些时间学习和开发插件。