使用NUnit测试属性是只读的

car*_*ter 1 c# nunit unit-testing properties readonly

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

    public string ReadOnlyProperty
    {
        get { return _readOnlyProperty; }
    }
Run Code Online (Sandbox Code Playgroud)

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

提前感谢您的反馈.

sta*_*ica 7

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

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

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

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

typeof(SomeType).GetProperty("ReadOnlyProperty").CanWrite == false
Run Code Online (Sandbox Code Playgroud)