1

我正在为具有setter 但没有 getters的属性的类编写单元测试。

我希望能够测试这些设置器以确保它们正确设置数据。

我发现我的选择是:

  • 为这些函数编写 getter,以便我可以测试它们是否设置正确
  • 编写一个方法,例如testAllSetters()一次测试它们

但是这两种解决方案都是不可取的,因为它只是为了测试它而向类添加了不需要的功能。

  • 我还可以测试该类的输出以查看它总体上是否正确,但在许多情况下,这并没有像我想要的那样测试单个设置器

在没有配对 getter 的类上对 setter 进行单元测试的最佳方法是什么?

4

3 回答 3

2

这里的问题是您不想为单元测试更改 API。开始将您的单元测试视为您 API 的另一个用户/消费者。就像使用该库的开发人员一样,单元测试也有自己的一套要求。当您将单元测试视为 API 的使用者时,就会有一个用户使用这些 getter,它会证明它们是合理的。

如果无法更改您的 API(例如,如果您正在开发可重用框架),请将单元测试 API 设为内部并使用InternalsVisibleToAttribute允许您的测试库访问代码的内部方法。

撇开单元测试不谈,您可能仍然需要考虑在这些属性上使用 getter,因为没有 getter 的属性对于开发人员来说非常不直观。框架设计指南甚至对此有一条规则:

不要提供 set-only 属性或 setter 比 getter 具有更广泛可访问性的属性。

您可能还需要考虑到这一点。

祝你好运。

于 2011-01-10T09:31:54.527 回答
1

您可以在调用 setter 后使用PrivateObject检查私有成员是否已正确更新

于 2011-01-10T08:39:38.177 回答
0

二传手有什么逻辑吗?

是的:要么打开吸气剂。Java:受保护并在同一个包中进行单元测试。C#:InternalsVisibleToAttribute。

否:不要直接设置设置器。没有意义。测试使用 setter 数据集的方法。

于 2011-01-10T15:01:41.280 回答