首先要回答您的问题,如果Ant junit与Eclipse
JUnit之间存在差异,则可能是类路径或环境问题。最简单的方法是找到一个在两者之间表现不同的测试,并打印出系统属性,然后从该方向进行操作。要尝试的另一件事是从Eclipse中运行ant脚本,以查看这是否有所不同(因为环境会发生变化)
Eclipse不使用Ant运行测试。
关于Eclipse如何运行JUnit测试,这是一个快速概述。警告:Eclipse JUnit插件有一些深奥的魔力。
Eclipse有4个JUnit插件,在大多数配置中默认都安装了这些插件:
- org.eclipse.jdt.junit:git://dev.eclipse.org/org.eclipse.jdt/org.eclipse.jdt.junit.git
- org.eclipse.jdt.junit.core:git://dev.eclipse.org/org.eclipse.jdt/org.eclipse.jdt.junit.core.git
- org.eclipse.jdt.junit.runtime:git://dev.eclipse.org/org.eclipse.jdt/org.eclipse.jdt.junit.runtime.git
- org.eclipse.jdt.junit4.runtime:git://dev.eclipse.org/org.eclipse.jdt/org.eclipse.jdt.junit4.runtime.git
这些是实际CVS存储库的git镜像。上一次我尝试使用它们时,它们没有编译,但是它们会为您提供代码,您至少可以将项目导入Eclipse并进行查看。
如果我们忽略配置页面,插件如何创建运行配置,JUnit视图本身的代码以及如何找到要运行的相关测试,那么我们可以集中精力于它如何运行测试。
核心类是
org.eclipse.jdt.junit.launcher.JUnitLaunchConfigurationDelegate和
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner。
JUnitLaunchConfigurationDelegate读取启动配置并派生一个将在其中运行测试的JVM。此新JVM的主要类是
RemoteTestRunner。如果要在项目上作为JUnit运行,则要运行的测试作为参数传递给派生的JVM,可以作为单个测试,也可以作为临时文件中的测试列表传递。如果要调试,则可以通过选中
Keepalive 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存储库开始,将项目导入Eclipse并尝试遍历代码。



