• 反射执行Groovy类方法NoSuchMethodException解答


    最近我在尝试实现分布式性能测试功能的拓展,其中的一个思路就是通过反射执行jar包中写好的测试方法达到自动执行性能测试用例的目的。但是在进行技术验证的时候,遇到了一个坑,就是在使用com.funtester.frame.execute.ExecuteSource#executeMethod(java.lang.String, java.lang.Object...)方法运行用例的时候,总是会报错:

    INFO-> 当前用户:oker,工作目录:/Users/oker/IdeaProjects/funtester/,系统编码格式:UTF-8,系统Mac OS X版本:10.16
    WARN-> 方法属性处理错误!
    java.lang.NoSuchMethodException: com.funtest.javatest.FunTester.test()
    	at java.lang.Class.getMethod(Class.java:1786) ~[?:1.8.0_281]
    	at com.funtester.frame.execute.ExecuteSource.executeMethod(ExecuteSource.java:115) [classes/:?]
    	at com.funtest.javatest.FunTester.main(FunTester.java:16) [classes/:?]
    WARN-> 反射执行方法失败:com.funtest.javatest.FunTester.test
    java.lang.IllegalAccessException: Class com.funtester.frame.execute.ExecuteSource can not access a member of class com.funtest.javatest.FunTester with modifiers "static"
    	at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:102) ~[?:1.8.0_281]
    	at java.lang.reflect.AccessibleObject.slowCheckMemberAccess(AccessibleObject.java:296) ~[?:1.8.0_281]
    	at java.lang.reflect.AccessibleObject.checkAccess(AccessibleObject.java:288) ~[?:1.8.0_281]
    	at java.lang.reflect.Method.invoke(Method.java:491) ~[?:1.8.0_281]
    	at com.funtester.frame.execute.ExecuteSource.executeMethod(ExecuteSource.java:132) [classes/:?]
    	at com.funtest.javatest.FunTester.main(FunTester.java:16) [classes/:?]
    
    Process finished with exit code 0
    
    

    起初我忽略了第二个错误,因为第一个错误导致Method对象创建失败导致的。

    下面是我测试代码:

    package com.funtest.javatest;
    
    import com.funtester.frame.SourceCode;
    import com.funtester.frame.execute.ExecuteSource;
    
    import java.io.IOException;
    
    public class FunTester extends SourceCode {
    
        public static void main(String[] args) throws IOException {
            ExecuteSource.executeMethod("com.funtest.javatest.FunTester.test");
        }
        
        static void test() {
            output("FunTester成功了!");
        }
    
    }
    
    

    在经过大量查询资料和修改代码进行测试的过程后,我都要放弃了。又重新翻阅了代码提交记录,对于了文章命令行如何执行jar包里面的方法时的代码,依然没有发现问题。

    我重新看了一下第二个错误java.lang.IllegalAccessException: Class com.funtester.frame.execute.ExecuteSource can not access a member of class com.funtest.javatest.FunTester with modifiers "static",这个信息让我想起来Groovy的特性,就是省略关键字public的功能,这样一来,方法的第一个关键字变成了static

    顿觉茅塞顿开!!!

    修改代码如下:

       public static void test() {
            output("FunTester成功了!");
        }
    
    

    控制台输出如下:

    INFO-> 当前用户:oker,工作目录:/Users/oker/IdeaProjects/funtester/,系统编码格式:UTF-8,系统Mac OS X版本:10.16
    INFO-> FunTester成功了!
    
    Process finished with exit code 0
    
    

    终于淌过了一条小溪流。再等等我完善一下测试框架的分布式执行性能测试脚本的拓展,再来分享!


    FunTester腾讯云年度作者Boss直聘签约作者GDevOps官方合作媒体,非著名测试开发。

  • 相关阅读:
    HTML滚动时位置固定 PHP
    js判断验证码是否正确 PHP
    PNG渐变图生成工具 PHP
    C# 提醒小工具 PHP
    js 密码强度检测 PHP
    js辅助输入层 PHP
    不常用样式 PHP
    ASP.NET编程中的十大技巧
    WEB打印大全
    如何在ASP.NET中用OWC绘制图表
  • 原文地址:https://www.cnblogs.com/FunTester/p/14704799.html
Copyright © 2020-2023  润新知