C# 如何在没有成对getter的类上单元测试setter?

C# 如何在没有成对getter的类上单元测试setter?,c#,unit-testing,accessor,getter-setter,C#,Unit Testing,Accessor,Getter Setter,我正在为一些类编写单元测试,这些类的属性有setter,但没有getter 我希望能够测试这些设置程序,以确保它们正确设置数据 我发现我的选择是: 为这些函数编写getter,以便测试它们是否设置正确 编写一个方法,例如testAllSetters(),一次对它们进行测试 但是这两种解决方案都是不受欢迎的,因为它只是为了测试类而向类添加不需要的功能 我还可以测试类的输出,以确定它在总体上是正确的,但在许多情况下,这并不能像我所希望的那样测试单个setter 在没有成对getter的类上设

我正在为一些类编写单元测试,这些类的属性有setter,但没有getter

我希望能够测试这些设置程序,以确保它们正确设置数据

我发现我的选择是:

  • 为这些函数编写getter,以便测试它们是否设置正确
  • 编写一个方法,例如
    testAllSetters()
    ,一次对它们进行测试
但是这两种解决方案都是不受欢迎的,因为它只是为了测试类而向类添加不需要的功能

  • 我还可以测试类的输出,以确定它在总体上是正确的,但在许多情况下,这并不能像我所希望的那样测试单个setter

在没有成对getter的类上设置单元测试setter的最佳方法是什么?

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

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

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

将单元测试放在一边,您仍然可能想考虑这些属性上的吸气剂,因为具有无吸气剂的属性对于开发人员来说是非常不直观的。政府甚至有一条规则反对这一点:

不提供仅设置的属性或 setter具有 比getter更广泛的可访问性

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


祝你好运。二传手有什么逻辑吗

是:要么打开getter。 Java:受保护,并将单元测试放在同一个包中。 C#:内部可归因

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

我标记了这个C#、访问器、getter setter,因为它似乎是特定于语言的。