为了提供一些背景,我已经学习Java大约10个月了,所以我的经验并不是很丰富。最近我看到一些关于测试私有方法和变量的不良实践的文章。
在理想的情况下,你不应该这么做,因为它意味着设计不良-然而,我正在使用一个旧的框架,在那里大多数方法都是通过反射调用,这是个糟糕的设计,但无论如何我都不能改变它。请不要回复说“你应该重新设计你的代码”,因为我无法改变框架的工作方式。
我想测试一个“流”类是否以特定方式运行,并根据私有变量的状态调用正确的方法,我希望确保某些方法设置私有实例变量的正确值,如果另一个私有变量具有特定值。这样我就可以确保当我对类进行未来更改时,类的流程/行为没有被破坏或改变。
现在,因为流程在很大程度上基于私有实例变量的状态,并且测试私有实例变量的状态是不好的,那么我该如何测试这个类呢?
以下是几种测试私有变量的方法:
在理想的情况下,你不应该这么做,因为它意味着设计不良-然而,我正在使用一个旧的框架,在那里大多数方法都是通过反射调用,这是个糟糕的设计,但无论如何我都不能改变它。请不要回复说“你应该重新设计你的代码”,因为我无法改变框架的工作方式。
我想测试一个“流”类是否以特定方式运行,并根据私有变量的状态调用正确的方法,我希望确保某些方法设置私有实例变量的正确值,如果另一个私有变量具有特定值。这样我就可以确保当我对类进行未来更改时,类的流程/行为没有被破坏或改变。
现在,因为流程在很大程度上基于私有实例变量的状态,并且测试私有实例变量的状态是不好的,那么我该如何测试这个类呢?
以下是几种测试私有变量的方法:
- 在代码结尾处实现默认访问getter和setter,并将junit测试类放在相同的包中。清晰地注释它们只用于测试。
- 将实例变量设为默认访问而不是私有访问,并将junit测试类放在同一个包中。同一包中的其他类也不会实例化这个类。
- 通过反射测试私有变量-这里我失去了IDE功能,因为如果我更改变量的名称,Eclipse不会重构,并且可能未来需要手动更改字符串以匹配要测试的类中的变量名。