Разработка через тестирование означает, что вы прекращаете кодирование, когда все тесты пройдены.
Если у вас нет теста на свойство, зачем вам его реализовывать? Если вы не тестируете / не определяете ожидаемое поведение в случае «незаконного» присвоения, что должно делать свойство?
Поэтому я полностью за тестирование каждого поведения, которое должен демонстрировать класс. В том числе «примитивные» свойства.
Чтобы упростить это тестирование, я создал простой NUnit, TestFixture
который предоставляет точки расширения для установки / получения значения, принимает списки допустимых и недопустимых значений и имеет один тест, чтобы проверить, правильно ли работает свойство. Тестирование отдельного свойства может выглядеть так:
[TestFixture]
public class Test_MyObject_SomeProperty : PropertyTest<int>
{
private MyObject obj = null;
public override void SetUp() { obj = new MyObject(); }
public override void TearDown() { obj = null; }
public override int Get() { return obj.SomeProperty; }
public override Set(int value) { obj.SomeProperty = value; }
public override IEnumerable<int> SomeValidValues() { return new List() { 1,3,5,7 }; }
public override IEnumerable<int> SomeInvalidValues() { return new List() { 2,4,6 }; }
}
Используя лямбды и атрибуты, это можно было бы даже написать более компактно. Я так понимаю, у MBUnit есть даже некоторая встроенная поддержка для подобных вещей. Дело в том, что приведенный выше код фиксирует назначение свойства.
PS: Вероятно, PropertyTest также должен иметь способ проверки того, что другие свойства объекта не изменились. Хм .. вернемся к чертежной доске.