1

我有一堂课,有几个,比如说50个,领域。这个类还有一个方法,可以根据某些条件改变所有字段的状态。

我正在为该方法创建一个单元测试。该测试应根据给定条件断言所有字段的状态都是正确的,因此我需要访问测试类中的字段。

鉴于这些字段是私有的,因为它们仅在类中才有意义,我必须找到一种从测试类访问它们的方法。

我只看到两种方法:

  • 将所有字段设置为受保护(或包可见性)
  • 为所有字段生成 50 个 getter
  • 创建 50 个委托方法来获取这些字段的状态而不是整个对象

在正常情况下,我会选择最后一个(尽管出于测试原因,我真的不喜欢更改界面)。但是在我的课堂上写 50 个新方法只是为了测试真的有意义吗?在这种情况下将字段设置为受保护不是更好吗,因为有这么多方法,类会变得不清楚?

笔记。反射是我想使用的最后一个选项,因为我不喜欢在测试时使用它:我不喜欢引用字段的文字,因为如果字段的名称发生更改,编译器不会建议我。

4

2 回答 2

3

这些领域如何在外部行为方面表现出来?这就是你应该测试的。

听起来(当前)这些字段仅用于实现。您的单元测试应该是独立于实现的,并且您应该测试单元(类)对外部操作的行为。如果没有明显的行为差异,那么什么要测试的?请注意,您可以以不同的方式实现您的字段(不同的字段、地图中的条目等),并且您的测试应该对此不可知。

如果您可以插入一个类来观察这些变化(例如,将这些变化反映在 GUI 中),那么您应该将其抽象为一个接口,以便您可以插入一个新的测试观察者。然后可以执行适当的断言(即它是否在字段更改时被回调?)

于 2013-05-29T10:27:09.013 回答
0

也许您可以使用BeanUtils找到适合您的解决方案。

PropertyUtils可能具有您正在寻找的功能。

于 2013-05-29T10:25:04.130 回答