0

我有以下代码。它适用于加载我指出的类 TestSuiteSample。TestSuiteSample 只是一个带有注释的标准 JUnit4 测试套件。作为正常的 java 项目运行,这将打印“true”,但在 eclipse rcp 下运行,这将打印“false”。任何想法为什么?

File testSuiteDir = new File("D:/TestDir/");
URL classUrl; 
classUrl = testSuiteDir.toURI().toURL(); 
URL[] classUrls = { classUrl }; 
URLClassLoader ucl = new URLClassLoader(classUrls); 
Class<?> cls = ucl.loadClass("TestSuiteSample"); 

if (cls.isAnnotationPresent(SuiteClasses.class)) { 
     System.out.println("true"); 
} else {
     System.out.println("false"); 

}

我试过这个来检查 cls 中的注释,但仍然返回 0 个注释。

Annotation[] annotations = new TestClass(clazz).getAnnotations();
for (Annotation annotation : annotations) {
    System.out.println(annotation.annotationType().getName());
}
4

1 回答 1

0

问题是SuiteClasses该类来自一个不相关的ClassLoader而不是来自URLClassLoader您用来加载您正在测试的类的类。URLClassLoader如果您创建包或线程上下文的父级,ClassLoader那么它应该解析为同一个类。

于 2012-07-18T07:28:43.157 回答