首页 > 解决方案 > 如何在没有修改现有代码的情况下识别在方法执行期间访问或更改的字段?

问题描述

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

例如,我有一些其他人编写的代码,底线是,我不允许修改他们的代码或至少其类的现有数据结构。他们没有使用 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
    }
}

有什么建议吗?

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

标签: javatestingreflectionlistenerinstrumentation

解决方案


很难说我的建议是否会奏效,因为它取决于第三方代码的设计方式,并且鉴于您说它没有 getter 或 setter,它可能设计得很糟糕。

尽管如此,这是我最好的镜头,Mockito。您可以创建一个测试套件并尝试识别例如

  • 一个方法被调用了多少次
  • 参数是什么
  • 它是一个调用的方法吗,等等

这是一个您可以开始使用它的链接,但是您有很多关于 Mockito 的资源(Mockito 教程


推荐阅读