EclipseRCP:使用与EclipseGalileo(4.5.0)附带的JUnit版本(4.3.1)不同的JUnit版本

EclipseRCP:使用与EclipseGalileo(4.5.0)附带的JUnit版本(4.3.1)不同的JUnit版本,junit,eclipse-rcp,classloader,Junit,Eclipse Rcp,Classloader,你好 我有以下情况: 我们正在开发一个EclipseRCP应用程序,希望从Eclipse3.4切换到Eclipse3.5。我们的JUnit测试使用JUnit4.3.1,我们有一个启动配置来启动我们的测试套件。我想我不需要在这里详述更多细节 问题是: 使用Eclipse3.5运行测试不起作用:JUnit在测试类中找不到任何注释(无论是(at)test还是(at)RunWith)。 我用一些日志输出修补了junit库,以检查发生了什么。我发现这个问题是一个类加载问题: 传递给JUnit的测试类“位

你好

我有以下情况:

我们正在开发一个EclipseRCP应用程序,希望从Eclipse3.4切换到Eclipse3.5。我们的JUnit测试使用JUnit4.3.1,我们有一个启动配置来启动我们的测试套件。我想我不需要在这里详述更多细节

问题是:

使用Eclipse3.5运行测试不起作用:JUnit在测试类中找不到任何注释(无论是(at)test还是(at)RunWith)。


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

传递给JUnit的测试类“位于”类加载器中,该类加载器与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无法将测试类中的注释与注释类(此处:RunWith.class)匹配:CL1中的“RunWith”不等于CL2中的“RunWith”


我有一个解决方案指向核心问题:将EclipseGalileo中的junit4.5替换为junit4.3.1,这样只有一个JUnit版本:测试运行和测试类都使用junit4.3.1(我必须修补“org.Eclipse.jdt.junit4.runtime”以接受更早期的JUnit版本)

我想我也可以用版本4.5替换测试类中的JUnit4.3.1,但这还不是一个选项

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

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


欢迎提供有关上述分析的任何提示

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


在JUnit测试的运行配置中,您可以选择要使用的测试运行程序(JUnit 4、JUnit 3…

我不确定这是您想要的,但是:

在JUnit测试的运行配置中,您可以选择要使用的测试运行程序(JUnit4、JUnit3…)