测试私有变量——总是不好的做法



给一些背景,我已经学习java大约10个月了,所以我真的不是很有经验。我最近读了一些关于测试私有方法和变量是多么糟糕的做法的文章。

在完美的世界里,你不应该这样做,因为它暗示了糟糕的设计——然而,我正在使用一个遗留框架,其中大多数方法都是通过反射调用的,这是糟糕的设计,但无论如何我都不能改变它。请不要回复说"你应该重新设计你的代码",因为我不能改变框架的工作方式。

我想测试一个"流"类的行为以某种方式,调用正确的方法取决于私有变量的状态,我想确保某些方法设置私有实例变量为正确的值,如果另一个私有变量有一定的值。这样,当我将来对类进行更改时,我可以确保类的流/行为没有中断或更改。

现在,因为流很大程度上是基于私有实例变量的状态,因为它不好测试私有实例变量的状态-我怎么测试类?

私有变量的测试方法:

  1. 在代码末尾实现默认的访问getter和setter,并将junit测试类放在同一个包中。

  2. 设置实例变量为默认访问而不是私有访问,并将junit测试类放在同一个包中。无论如何,同一个包中的其他类都不会实例化这个类。

  3. 通过反射测试私有变量——我在这里失去了IDE的功能,因为如果我更改变量的名称,Eclipse不会重构,并且将来可能会手动更改string以匹配要测试的类中的变量名称。

以上三个中哪一个是"较小"的邪恶使用?测试私有变量是否比完全不测试更好?

私有字段的状态与类的正确功能无关。你不应该测试私有变量。

测试类做了什么,而不是是如何做的

如果你想测试类是否正确地设置了它的内部状态,那么在此之后它会以特定的方式运行,然后调用设置状态的方法并测试之后的行为是否正确。

如果需要1000个测试来确保这一点并不重要——它们只是单元测试,所以它们会很快。

未来的程序员可以自由地改变一个类的内部工作方式,只要类的契约得到维护。

第一个选项对您来说是一个不错的选择。在遵循良好的编码实践的同时,我们应该始终将变量设置为私有,将方法设置为公共,这样变量就不能被修改,方法就可以被外部世界访问。

相关内容

  • 没有找到相关文章

最新更新