2009-06-12 7 views
2

Préférez-vous des valeurs ou des expressions littérales dans vos affirmations dans vos tests unitaires? Ce petit exemple montre ce que je veux dire - s'il vous plaît prêter attention aux commentaires:Les littéraux ou les expressions dans les tests unitaires s'affirment?

[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>; 

La bonne chose à propos de l'expression est que lorsque l'échantillon change XML, ne cassera pas le test unitaire. D'autre part, j'ai fondamentalement fourni une implémentation d'un aspect de mon SlideshowConverter directement dans mon test unitaire que je n'aime pas (le test devrait tester l'intention, pas l'implémentation). Je peux aussi imaginer que les tests utilisant des expressions seront plus sujets aux erreurs de programmation (j'aurais pu, par exemple, faire une erreur dans mon expression E4X dans ma méthode de test).

Quelle approche préférez-vous? Quel avantage est généralement plus important sur les projets du monde réel?

Répondre

1

Personnellement, j'aime utiliser des constantes dans mes tests - cela garantit que les montages de test sont simples et directs. De plus, comme vous le mentionnez, cela évite les erreurs de programmation dans le test lui-même, ce qui peut cacher des erreurs de programmation dans le code réel.

1

D'autant que vous avez étiqueté ce TDD: respectez les littéraux. Écrire un test avant que le code existe pour le passer, vous vous dites, "Soi: si j'avais cette fonction et lui donnais ces paramètres, alors ce est ce que je récupérerais." Où ce est une valeur très spécifique. Ne le cache pas; ne pas l'abstraire - il suffit de mettre la valeur dans le test. Il améliore également la valeur de la documentation du test.

Questions connexes