Тестова розробка означає, що ви припиняєте кодування, коли всі ваші тести проходять.
Якщо у вас немає тесту на властивість, то навіщо вам його застосовувати? Якщо ви не протестуєте / не визначите очікувану поведінку у випадку "незаконного" призначення, що має робити властивість?
Тому я повністю перевіряю кожну поведінку, яку повинен проявляти клас. Включаючи "примітивні" властивості.
Щоб полегшити це тестування, я створив простий 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 також повинен мати спосіб перевірити, щоб інші властивості об'єкта не змінювалися. Хм .. повертаємось до креслення.