Проверка того, что свойство доступно только для чтения с помощью NUnit - PullRequest
1 голос
/ 19 ноября 2011

У меня есть свойство только для чтения в классе, который я тестирую.

    public string ReadOnlyProperty
    {
        get { return _readOnlyProperty; }
    }

Есть ли способ написать тест NUnit, который гарантирует, что это свойство доступно только для чтения?Факт, что я хочу сделать это вообще, заставляет вас поднять бровь?Мне кажется, что добавление тестов, гарантирующих, что свойства только для чтения остаются доступными только для чтения, если не принято преднамеренное решение об их изменении, так же важно, как и любое другое поведение.

Заранее спасибо за отзыв.

Ответы [ 2 ]

7 голосов
/ 19 ноября 2011

Мне кажется, что добавление тестов, гарантирующих, что свойства только для чтения остаются доступными только для чтения, если не принято преднамеренное решение об их изменении, так же важно, как и любое другое поведение.

Согласен, но осмелюсь сказать, что юнит-тестирование - неправильный путь.Вот почему:

Модульное тестирование обычно используется для тестирования динамических аспектов кода, то есть его поведения во время выполнения.С другой стороны, вы ищете способ протестировать статический (во время компиляции или во время разработки) аспект вашего кода.Мне кажется, что такие инструменты, как FxCop или NDepend, более уместны в этом случае.(Возможно, я ошибаюсь из-за того, что эти конкретные инструменты уместны, поскольку я сам не очень хорошо их знаю.)

При этом, как вы уже узнали из предыдущих ответов, вы могли бы сделать это с помощью отражения:

typeof(SomeType).GetProperty("ReadOnlyProperty").CanWrite == false
3 голосов
/ 19 ноября 2011

Вы должны иметь возможность использовать отражение (в частности, PropertyInfo.GetSetMethod, которое будет возвращать ноль, если не определен определенный метод доступа).

...