java - Eclipse 如何实际运行 Junit 测试?

标签 java eclipse junit

在 Eclipse 和 Ant 中运行 Junit 测试时,我遇到了一个差异。这是场景:

Eclipse 中的一切都按预期运行,但是,在运行我快速创建的 Ant 构建脚本时,我无法获得准确的 Junit 报告。我对我们的测试运行器和测试用例做了一些更改(简而言之,我将 Test suite() 方法添加到我的所有测试用例中)返回一个新的 Junit4TestAdapter,并让我们的自定义运行器执行 RunNotifier.fireTestAssumptionFailed(Failure)而不是 fireTestAssumption。现在在 Ant 中一切都运行良好,但在 Eclipse 中运行时失败被标记为通过。

是否有任何 Eclipse 的文档可以准确解释它如何运行 Junit 测试?我基本上想知道 Eclipse 如何执行 Junit 测试,它是否直接通过 Ant 运行,是否使用 Java 与 Junit 交互等。如果有人知道该问题的实际解决方案,我也欢迎,但我会我真的很想尝试自己解决这个问题,我只需要指出正确的方向。

最佳答案

首先回答您的问题,如果 Ant junit 和 Eclipse JUnit 之间存在差异,则可能是类路径或环境问题。最简单的方法是找到一个在两者之间执行不同的测试并打印出系统属性,然后从那个方向开始工作。要尝试的另一件事是从 Eclipse 中运行 ant 脚本,看看这是否有任何不同(因为环境会改变)

Eclipse 不使用 Ant 来运行测试。


至于 Eclipse 如何运行 JUnit 测试,这里有一个快速概述。请注意:Eclipse JUnit 插件中有一些深奥的魔法。

Eclipse 有 4 个 JUnit 插件,它们在大多数配置中都是默认安装的:

  1. org.eclipse.jdt.junit: git://dev.eclipse.org/org.eclipse.jdt/org.eclipse.jdt.junit.git
  2. org.eclipse.jdt.junit.core: git://dev.eclipse.org/org.eclipse.jdt/org.eclipse.jdt.junit.core.git
  3. org.eclipse.jdt.junit.runtime: git://dev.eclipse.org/org.eclipse.jdt/org.eclipse.jdt.junit.runtime.git
  4. org.eclipse.jdt.junit4.runtime: git://dev.eclipse.org/org.eclipse.jdt/org.eclipse.jdt.junit4.runtime.git

这些是实际 CVS 存储库的 git 镜像。上次我尝试使用它们时,它们没有编译,但它们会为您提供代码,您至少可以将项目导入 Eclipse 并查看它们。

如果我们忽略配置页面、插件如何创建运行配置、JUnit View 本身的代码以及它如何找到要运行的相关测试,我们可以专注于它如何运行测试。

核心类是 org.eclipse.jdt.junit.launcher.JUnitLaunchConfigurationDelegateorg.eclipse.jdt.internal.junit.runner.RemoteTestRunnerJUnitLaunchConfigurationDelegate 读取启动配置并派生一个 JVM,测试将在其中运行。这个新 JVM 的主要类是 RemoteTestRunner。要运行的测试作为参数传递给派生的 JVM,或者作为单个测试,或者作为临时文件中的测试列表(如果您在项目上运行 Run as JUnit)。如果您正在调试,可以通过选中运行配置中的 Keep alive when debugging 复选框来使这个新的 JVM 保持 Activity 状态。在这种情况下,JVM 将保留下来,现有测试的重新运行将通过套接字发送。

RemoteTestRunner 运行测试并通过套接字将结果传回 Eclipse,然后更新 JUnit View 。其核心是 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 并尝试处理代码。

关于java - Eclipse 如何实际运行 Junit 测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7892070/

相关文章:

java - 如何使用 Maven 创建具有依赖项的可执行/可运行 JAR?

带点的单词的 Java 正则表达式

java - 在 Eclipse 中的 "Run configurations"向导的目标中添加注释。

java - 有哪些方法可以测试依赖于静态方法的方法?

java - jstat - 生产中的任何性能影响

java - 边缘移动的控制点

java - Android/Eclipse 代码错误

java - 如何配置intellij运行pom文件中指定的所有maven插件

java - 如何在 Spring Boot 应用程序中测试 Quartz 作业的正常工作

java - 当从第三个(插件)引用时,Powermock 导致 Eclipse 中 JUnit 插件测试的 ClassNotFoundException