2009-06-12 5 views
2

Bevorzugen Sie literale Werte oder Ausdrücke in Ihren Asserts in Ihren Komponententests? Dieses kleine Beispiel zeigt, was ich meine - bitte beachten Sie die Kommentare:Literale oder Ausdrücke in Unit Test behauptet?

[Test] 
public function fromXML_works() : void { 
    var slideshow : Slideshow = SlideshowConverter.fromXML(xmlSample); 

    // do you prefer literal value "1": 
    assertEquals(slideshow.id, "1"); 

    // ... or an expression like this: 
    assertEquals(slideshow.id, [email protected]); 
} 


private var xmlSample : XML = 
    <slideshow id="1"> 
     <someOtherTags /> 
    </slideshow>; 

Die schöne an dem Ausdruck ist, dass, wenn die XML-Probe ändert, wird der Unit-Test nicht brechen. Auf der anderen Seite habe ich im Grunde eine Implementierung von einem Aspekt meines SlideshowConverter direkt in meinem Komponententest zur Verfügung gestellt, die ich nicht mag (der Test sollte Absicht, nicht Implementierung testen). Ich kann mir auch vorstellen, dass Tests, die Ausdrücke verwenden, anfälliger für Programmierfehler sind (ich könnte zum Beispiel einen Fehler in meinem E4X-Ausdruck in meiner Testmethode gemacht haben).

Welchen Ansatz bevorzugen Sie? Welcher Vorteil ist bei realen Projekten in der Regel wichtiger?

Antwort

1

Persönlich verwende ich Konstanten innerhalb meiner Tests - es stellt sicher, dass die Testvorrichtungen einfach und unkompliziert sind. Außerdem, wie Sie erwähnen, vermeidet es Programmierfehler im Test selbst, die Programmierfehler im echten Code verbergen können.

1

Zumal Sie diese TDD markiert haben: Bleiben Sie bei Literalen. Schreiben Sie einen Test, bevor Code existiert, um es zu übergeben, sagen Sie zu sich selbst: "Selbst: Wenn ich diese Funktion hatte und gab ihm diese Parameter, dann diese ist, was ich zurückbekommen würde." Wo dieser ist ein sehr spezifischer Wert. Versteck es nicht weg; abstrahiere es nicht - gib einfach den Wert in den Test. Es erhöht auch den Dokumentationswert des Tests.