java - 如何在没有修改现有代码的情况下识别在方法执行期间访问或更改的字段?
问题描述
这是为了测试目的。我试图在方法执行期间弄清楚如何识别被访问或修改的字段。这些字段可以是公共的、私有的、来自对象的超类、父类、外部类等。
例如,我有一些其他人编写的代码,底线是,我不允许修改他们的代码或至少其类的现有数据结构。他们没有使用 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。您可以创建一个测试套件并尝试识别例如
- 一个方法被调用了多少次
- 参数是什么
- 它是一个调用的方法吗,等等
这是一个您可以开始使用它的链接,但是您有很多关于 Mockito 的资源(Mockito 教程)
推荐阅读
- html - HTML 中的输入和按钮
- php - Laravel:如果用户在路由中手动输入 ID,如何抛出 403?
- c# - 使用声纳的 C# 代码
- xml - XML 差异算法
- php - PHP 严格搜索
- laravel - 删除模型时如何触发 Laravel (5.6) 事件?
- python - 如何创建一个循环,以便通过 python 将所有查询放入一个 csv 中?
- winforms - 组合框显示 ValueMember 而不是 DisplayMember
- drush - 如何将我的 ssh 密钥和身份信息放入 ddev 的 Web 容器中?
- firebase - Firestore 安全规则、get() 和允许创建操作