如何在不修改现有代码的情况下识别在方法执行期间访问或更改的字段?
How to identify fields that were accessed or changed during a method execution without existing code modification?
这是为了测试目的。我试图在方法执行期间弄清楚如何识别被访问或修改的字段。字段可以是public、private、来自对象的superclass、parentclass、outerclass等
例如,我有一些别人写的代码,最重要的是,我不允许修改他们的代码或者至少是其 classes 的现有数据结构。而且他们没有使用 setter 和 getter 进行大部分字段更改。在方法的开头和 return 之前添加几行代码,允许调用我自己实现的侦听器方法。
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
}
}
有什么建议吗?
编辑
换句话说,我们想要识别方法执行的 implicit/indirect 个输入和输出。
很难说我的建议是否会奏效,因为这取决于第三方代码的设计方式,并且鉴于您说它没有 getter 或 setter,它可能设计不当。
尽管如此,这是我最好的拍摄,Mockito。
您可以创建一个测试套件并尝试识别例如
- 一个方法被调用了多少次
- 参数是什么
- 它是否是一个被调用的方法,等等
这是一个 link 您可以开始使用它的地方,但是您有很多关于 Mockito 的资源 (Mockito Tutorial)
这是为了测试目的。我试图在方法执行期间弄清楚如何识别被访问或修改的字段。字段可以是public、private、来自对象的superclass、parentclass、outerclass等
例如,我有一些别人写的代码,最重要的是,我不允许修改他们的代码或者至少是其 classes 的现有数据结构。而且他们没有使用 setter 和 getter 进行大部分字段更改。在方法的开头和 return 之前添加几行代码,允许调用我自己实现的侦听器方法。
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
}
}
有什么建议吗?
编辑 换句话说,我们想要识别方法执行的 implicit/indirect 个输入和输出。
很难说我的建议是否会奏效,因为这取决于第三方代码的设计方式,并且鉴于您说它没有 getter 或 setter,它可能设计不当。
尽管如此,这是我最好的拍摄,Mockito。 您可以创建一个测试套件并尝试识别例如
- 一个方法被调用了多少次
- 参数是什么
- 它是否是一个被调用的方法,等等
这是一个 link 您可以开始使用它的地方,但是您有很多关于 Mockito 的资源 (Mockito Tutorial)