2009-08-12 40 views
2

你好,Eclipse RCP的:使用不同JUnit版本(4.3.1)不是附带月食伽利略(4.5.0)

我有以下情况:

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

的问题是:

运行与Eclipse 3.5的测试不起作用:JUnit的找不到在测试类任何注释(既不是(在)测试,也没有(在)RunWith)。


我修补了JUnit库的一些日志输出,以检查是怎么回事。我发现这个问题是一个类加载问题:

传递给JUnit'的测试类位于'一个ClassLoader,它不同于JUnit用来加载类似'RunWith'的注解类的ClassLoader。这不是在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”。


我有一个指向核心问题的解决方案:更换的JUnit 4.5在Eclipse伽利略与JUnit的4.3.1,这样只有一个基于JUnit的版本:试运行和测试类都使用JUnit 4.3.1(我必须修补“org.eclipse.jdt.junit4.runtime”以接受ealier junit版本)。

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

猜测:的类加载器是不同的,因为类“来自”不同的JUnit软件包:从4.3.1版本,其标注的TestClass中和测试版本运行4.5

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

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

回答

0

我不知道这是你在找什么,但:

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