Java 如何在不修改现有代码的情况下识别在方法执行期间访问或更改的字段?

Java 如何在不修改现有代码的情况下识别在方法执行期间访问或更改的字段?,java,testing,reflection,listener,instrumentation,Java,Testing,Reflection,Listener,Instrumentation,这是为了测试目的。我试图弄清楚在方法执行期间,如何识别被访问或修改的字段。字段可以是public、private,来自对象的超类、父类、外部类等 例如,我有一些其他人编写的代码,底线是,我不允许修改他们的代码或至少其类的现有数据结构。而且他们没有在大多数字段更改中使用setter和getter。在方法的开头和允许调用我自己实现的侦听器方法的返回之前添加几行代码 public class SuperClass{ private String field0; public Stri

这是为了测试目的。我试图弄清楚在方法执行期间,如何识别被访问或修改的字段。字段可以是public、private,来自对象的超类、父类、外部类等

例如,我有一些其他人编写的代码,底线是,我不允许修改他们的代码或至少其类的现有数据结构。而且他们没有在大多数字段更改中使用setter和getter。在方法的开头和允许调用我自己实现的侦听器方法的返回之前添加几行代码

public class SuperClass{
    private String field0;

    public String GetAndChangeField0(){
        field0 = "changed"; // field changed
        return field0;
    }
}

public class SubClass extends SuperClass{
    public String field1;

    public void method1(){
        field1 = "changed"; //local field changed
        String st = field1; //local field accessed
        String st0 = GetAndChangeField0(); //private field from SuperClass changed and accessed
    }
}
有什么建议吗

编辑
换句话说,我们想要识别方法执行的隐式/间接输入和输出

很难说我的建议是否有效,因为这取决于第三方代码是如何设计的,而且考虑到你说它没有getter或setter,它可能设计得很糟糕

不过,这是我最好的机会,莫基托。 例如,您可以创建一个测试套件并尝试识别

  • 一个方法被调用了多少次
  • 参数是什么
  • 它是一个被调用的方法吗,等等
这是一个链接,您可以开始使用它,但是您有很多关于Mockito()的资源