【问题标题】:Testing that a property is read-only using NUnit使用 NUnit 测试属性是否为只读
【发布时间】:2011-11-18 20:54:23
【问题描述】:

我正在测试的类上有一个只读属性。

    public string ReadOnlyProperty
    {
        get { return _readOnlyProperty; }
    }

有没有办法编写一个 NUnit 测试来确保这个属性是只读的?我想要这样做的事实是否会让你扬起眉毛?在我看来,添加测试以确保只读属性保持为只读,除非经过深思熟虑决定更改它们,这与任何其他行为一样重要。

提前感谢您的反馈。

【问题讨论】:

  • 你必须通过反射来做到这一点。
  • 谢谢大家!反射不是我非常熟悉的东西。欣赏指南针。

标签: c# unit-testing properties nunit readonly


【解决方案1】:

在我看来,添加测试以确保只读属性保持只读状态,除非经过深思熟虑的决定来更改它们,这与任何其他行为一样重要。

我同意,但我敢说单元测试是错误的方式。原因如下:

单元测试通常用于测试代码的动态方面,即它的运行时行为。另一方面,您正在寻找一种方法来测试代码的静态(编译时或设计时)方面。在我看来,FxCop 或 NDepend 等工具在这种情况下更合适。 (我可能对这些特定工​​具的适用性有误,因为我自己也不太了解它们。)

话虽如此,正如您已经从之前的答案中了解到的,您可以使用反射来做到这一点:

typeof(SomeType).GetProperty("ReadOnlyProperty").CanWrite == false

【讨论】:

    【解决方案2】:

    您应该能够使用反射(特别是 PropertyInfo.GetSetMethod,如果没有定义 set 访问器,它将返回 null)。

    【讨论】:

    • PropertyInfo.CanWrite 似乎比.GetSetMethod 更直接。
    • CanWrite 似乎提供的粒度较小,因为 GetSetMethod 允许您指定是要检查公共设置器还是所有设置器。不确定这种额外的粒度在他的特定情况下是否有用。
    • 好点。在这种情况下,我只关心公共二传手。如果我正在对基类进行单元测试,我可能希望确保有一个受保护的 setter 出于某种原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多