Eclipse RCP:使用与eclipse galileo(4.5.0)不同的JUnit版本(4.3.1)

时间:2009-08-12 12:13:12

标签: junit eclipse-rcp classloader

喂,

我有以下情况:

我们正在开发 Eclipse RCP应用程序,并希望从Eclipse 3.4切换到 Eclipse 3.5 。我们的JUnit-Tests正在使用JUnit 4.3.1,我们有一个启动配置来启动我们的测试套件。我想我不需要在这里详细介绍。

问题是:

使用Eclipse 3.5运行测试不起作用:JUnit在测试类中找不到任何注释(既不是(at)Test也不是(at)RunWith)。


我使用一些日志记录输出修补了junit库以检查发生了什么。我发现这个问题是一个类加载问题:

传递给JUnit的测试类位于一个ClassLoader中,它不同于JUnit用于加载注释类的类,如'RunWith'。 Eclipse 3.4中不是这种情况

in org.junit.internal.requests.ClassRequest:

public Runner getRunner() {   
    log("TestClass     ClassLoader: "+this.fTestClass.getClassLoader());
    log("RunWith.class ClassLoader: "+RunWith.class.getClassLoader());   
    ... // validating test class: searching for annotations and more

}

第一行打印另一个类加载器而不是第二行。这很糟糕,因为JUnit 无法将测试类中的注释与Annotation-Class(此处为:RunWith.class)相匹配:CL1中的“RunWith”不等于CL2中的“RunWith”。


我有一个指向核心问题的解决方案:用JUnit 4.3.1替换Eclipse Galileo中的JUnit 4.5 ,这样只有一个JUnit-Version:Test-Run和测试类都使用JUnit 4.3.1(我必须修补“org.eclipse.jdt.junit4.runtime”来接受更早的junit版本)。

我想我也可以在我的测试类中使用版本4.5替换JUnit 4.3.1,但这还不是一个选项。

猜测: 类加载器是不同的,因为类来自'不同的JUnit-Bundles:测试类及其注释版本为4.3.1,测试运行于版本4.5

我想知道的是什么:除了修补Eclipse(替换JUnit版本)之外还有其他解决方案吗?任何命令行参数或类似的?强制Eclipse使用JUnit 4.3.1的任何配置?

欢迎任何关于上述分析的提示!

1 个答案:

答案 0 :(得分:0)

我不确定这是你在找什么,但是:

在JUnit测试的运行配置中,您可以选择要使用的 Test Runner (JUnit 4,JUnit 3 ...)