Gibt es einen Wert beim Komponententest für automatisch implementierte Eigenschaften?

7

Es scheint außergewöhnlich schwer zu sein, aber nach der Regel zu gehen alles, was öffentlich verfügbar ist, sollte getestet werden sollte automatisch implementierte Eigenschaften getestet werden?

Kundenklasse

%Vor%

Geprüft von

%Vor%     
ahsteele 17.06.2010, 21:07
quelle

5 Antworten

7

Was passiert, wenn Sie von automatisch implementierten Eigenschaften zu etwas völlig anderem wechseln? Der Test erscheint nur redundant, weil Sie die Implementierung kennen - was Sie beim Schreiben von Tests nicht beachten sollten.

Natürlich hängt das von der Wahrscheinlichkeit ab, dass Sie die Implementierung bald ändern.

    
Arne 17.06.2010, 21:13
quelle
10

Ich betrachte im Allgemeinen jeden Code, der keine Aktion ausführt, als nicht testbar. Dies bedeutet in der Regel, dass ich Eigenschaften (automatisch oder nicht implementiert) nicht teste, da sie nur einen Wert festlegen oder zurückgeben.

Dies wird sich ändern, wenn der Getter oder Setter einer Eigenschaft irgendeine Art von "Arbeit" ausführt, wie möglicherweise einen von zwei (oder mehr) Werten basierend auf dem Zustand eines anderen Feldes / Eigenschaft / was auch immer zurückzugeben.

Wenn Sie es nicht gesehen haben, empfehle ich Roy Osherove Buch über Unit Testing . Es behandelt alle Arten von "Was zu testen und wann" Fragen, einschließlich dieser.

    
ckramer 17.06.2010 21:14
quelle
1

Das hängt davon ab, ob Sie testen, ob eine API einer erwarteten Gruppe von Eigenschaften entspricht oder ob Sie, wie Sie demonstrieren, nur den Zugriff testen und die Eigenschaften festlegen.

In dem Beispiel, das du gibst, würde ich nein sagen.

Aktualisieren

Übereinstimmung mit der erwarteten API; Wenn Sie indirekt auf Eigenschaften zugreifen, z. B. in einer Reflektions- / dynamischen Umgebung, und Sie verwenden Zugriffsaufrufe für Eigenschaften und Methoden, um zu überprüfen, ob eine unbekannte API einer erwarteten entspricht.

    
John Weldon 17.06.2010 21:10
quelle
1

Das Testen der Einstellungen und das Abrufen von Eigenschaften sollten im Kontext des Testens einer Geschäftsfunktion des Objekts erfolgen. Wenn die Eigenschaft nicht durch eine Geschäftsfunktion getestet wird, war entweder die Eigenschaft nicht erforderlich oder Sie benötigen weitere Tests. Ich würde vorschlagen, dass Sie die Eigenschaften hinzufügen, während Sie die Tests hinzufügen, die sie benötigen, anstatt sie vor dem Schreiben von Tests hinzuzufügen.

Indem Sie die Geschäftsfunktion testen, behandeln Sie den Code aus der Perspektive des Komponententests eher als Black Box. Auf diese Weise können Sie die Implementierungsdetails mit einem geringeren Einfluss auf die Tests ändern. Da Refactor eine wichtige (und oft übersehene) Stufe des TDD-Zyklus ist, bedeutet dies viel weniger Code-Bearbeitung. Sie können auch erkennen, dass (zum Beispiel) die Eigenschaft keinen öffentlichen Setter haben sollte und sollte durch eine Methode zugewiesen werden, die Validierung und andere Geschäftslogik durchführt.

    
AbstractCode 18.06.2010 01:55
quelle
0

Unit-Tests sollten sich auf Testfunktionen beschränken, die Sie in Ihrer Anwendung implementieren.

Sie sollten API / SDK nicht testen, auf die Ihre Anwendung angewiesen ist. Teilweise, weil es Zeitverschwendung ist (will Ihr Unternehmen für Sie das SDK / API von X-Third-Party testen?), Und teilweise weil es "Rauschen" in Ihre Komponententestsuite einführt. Der Kontext Ihrer Komponententestbibliothek sollte sein, nur den Code in Ihrer Anwendung zu testen.

    
warriorpostman 17.06.2010 21:14
quelle