使用NUnit测试属性是只读的

时间:2011-11-18 20:54:23

标签: c# unit-testing properties nunit readonly

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

    public string ReadOnlyProperty
    {
        get { return _readOnlyProperty; }
    }

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

提前感谢您的反馈。

2 个答案:

答案 0 :(得分:7)

  

在我看来,添加测试以确保只读属性保持只读,除非故意决定更改它们与任何其他行为一样重要。

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

单元测试通常用于测试代码的动态方面,即其运行时行为。另一方面,您正在寻找一种方法来测试代码的静态(编译时或设计时)方面。在我看来,在这种情况下,诸如FxCop或NDepend之类的工具更合适。 (我可能错误地认为这些特殊工具是合适的,因为我自己并不了解它们。)

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

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

答案 1 :(得分:3)

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