Java 如何获得所有测试方法';来自extern.class文件的名称

Java 如何获得所有测试方法';来自extern.class文件的名称,java,Java,我试图从extern.class文件中获取测试方法的名称。 以下是目录树: 班级 命令类 目标类 CMDTest.class CMDTest1.class CMDTest2.class 不允许将这些文件添加到工作目录 我的解决方案是使用URLClassloader加载目标类中的所有文件,然后使用getDeclaredMethods()获取带有annotation@Test的所有方法。但是,CMD.class中定义了一些自定义异常,其导致的异常如下: 线程“main”java.l

我试图从extern.class文件中获取测试方法的名称。 以下是目录树:

  • 班级
    • 命令类
  • 目标类
    • CMDTest.class
    • CMDTest1.class
    • CMDTest2.class
不允许将这些文件添加到工作目录

我的解决方案是使用URLClassloader加载目标类中的所有文件,然后使用getDeclaredMethods()获取带有annotation@Test的所有方法。但是,CMD.class中定义了一些自定义异常,其导致的异常如下:

  • 线程“main”java.lang.NoClassDefFoundError中出现异常:CMD$OptionException
OptionException在CMD.class中定义

如何解决这个问题,或者有没有有效的方法从extern.class文件中获取测试方法的名称

非常感谢

代码如下:

URL[]URL={newurl(“文件:D:\\testclasses\\”),};
URLClassLoader myClassLoader=新的URLClassLoader(URL);
File classesDirectory=新文件(“D:\\Lab1\\classes\\net\\mooctest”);
文件testClassesDirectory=新文件(“D:\\Lab1\\testclasses\\net\\mooctest”);
文件[]classesList=classesDirectory.listFiles();
文件[]testClassesList=testClassesDirectory.listFiles();
for(文件:testClassesList){
//net.mooctest是包名
Class clazz=myClassLoader.loadClass(“net.mooctest.+file.getName().split(“\\”)[0]);
方法[]declaredMethods=clazz.getDeclaredMethods();
对于(方法:公布方法){
Test declaredAnnotation=方法.getDeclaredAnnotation(Test.class);
if(declaredAnnotation!=null){
System.out.println(method.getDeclaringClass()+“”+method.getName());
}
}
}

“OptionException是在CMD.class中定义的。”-这不太可能;它应该在
CMD$OptionException.class
中定义。您的类加载器需要能够找到该文件(事实上,根据您编写的内容,我希望该文件位于
classes
文件夹中,因此,如果我理解正确,它应该由默认类加载器加载;事实并非如此,这一点很奇怪)。