我有以下代码。它适用于加载我指向的类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());
}
答案 0 :(得分:0)
问题是SuiteClasses
类来自不相关的ClassLoader
,而不是来自您用于加载正在测试的类的URLClassLoader
。如果您将URLClassLoader
的父级作为包或线程上下文ClassLoader
,那么它应该解析为同一个类。