Testgesteuerte Entwicklung bedeutet, dass Sie die Codierung beenden, wenn alle Ihre Tests bestanden wurden.
Wenn Sie keinen Test für eine Eigenschaft haben, warum sollten Sie ihn dann implementieren? Was sollte die Eigenschaft tun, wenn Sie das erwartete Verhalten im Falle einer "illegalen" Zuweisung nicht testen / definieren?
Deshalb bin ich total dafür, jedes Verhalten zu testen, das eine Klasse zeigen sollte. Einschließlich "primitiver" Eigenschaften.
Um diesen Test zu vereinfachen, habe ich eine einfache NUnit erstellt TestFixture
, die Erweiterungspunkte zum Festlegen / Abrufen des Werts bereitstellt, Listen gültiger und ungültiger Werte erstellt und einen einzigen Test durchführt, um zu überprüfen, ob die Eigenschaft ordnungsgemäß funktioniert. Das Testen einer einzelnen Eigenschaft könnte folgendermaßen aussehen:
[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 }; }
}
Mit Lambdas und Attributen kann dies sogar kompakter geschrieben werden. Ich nehme an, MBUnit hat sogar native Unterstützung für solche Dinge. Der Punkt ist jedoch, dass der obige Code die Absicht der Eigenschaft erfasst.
PS: Wahrscheinlich sollte der PropertyTest auch eine Möglichkeit haben, zu überprüfen, ob sich andere Eigenschaften des Objekts nicht geändert haben. Hmm .. zurück zum Zeichenbrett.