java—如何从extern.class文件中获取所有测试方法的名称

dojqjjoe  于 2021-07-11  发布在  Java
关注(0)|答案(1)|浏览(197)

我正在尝试从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文件中获取测试方法的名称
谢谢!

pqwbnv8z

pqwbnv8z1#

代码如下:

URL[] urls = {new URL("file:D:\\test-classes\\"),};
        URLClassLoader myClassLoader = new URLClassLoader(urls);
        File classesDirectory = new File("D:\\Lab1\\classes\\net\\mooctest");
        File testClassesDirectory = new File("D:\\Lab1\\test-classes\\net\\mooctest");
        File[] classesList = classesDirectory.listFiles();
        File[] testClassesList = testClassesDirectory.listFiles();
        for (File file : testClassesList) {
            //net.mooctest is package name
            Class clazz = myClassLoader.loadClass("net.mooctest." + file.getName().split("\\.")[0]);
            Method[] declaredMethods = clazz.getDeclaredMethods();
            for (Method method : declaredMethods) {
                Test declaredAnnotation = method.getDeclaredAnnotation(Test.class);
                if (declaredAnnotation != null) {
                    System.out.println(method.getDeclaringClass() + " " + method.getName());
                }
            }
        }

相关问题