J'essaie de suivre de bonnes pratiques lors de l'écriture de mes suites de test. À mi-chemin, j'ai réalisé que iam passe beaucoup de mon temps sur les faux objets ... La plupart de mes tests fait quelque chose comme ceci
p> [Test]
public void GetGenericTemplateContains()
{
ITemplateRepository rep = new FakeTemplateRepository();
Assert.IsTrue(rep.GetGenericTemplate().StartsWith("<xml>"));
}
3 Réponses :
Encore une fois ... une autre personne tombe dans un faux anti-motif. Vous "tester une simulation" ou un faux objet - ce qui n'est aucune utilisation du tout. Mocks doit être utilisé pour abstraire des dépendances ou des collaborateurs de votre sujet de test. Pas le sujet de test lui-même. P>
Premier, je dirais que le papier de Martin Fowler ' Mocks n'est pas des stubs " . Si vous souhaitez renverser des valeurs ou des attentes de configuration pour des arguments spécifiques, optez pour un cadre moqueur sur le rouleau-vos-possèdent des faux. Les faux sont généralement utilisés pour augmenter les collaborateurs ... où vous ne vous souciez pas du collaborateur .. E. G. Stub Out réseau ou fichier io.
Suivant Lire cette question similaire à la question et les réponses à celle-ci. P>
Tout d'abord, apprenez un cadre d'isolement (moqueur), comme MOQ ou < Un href = "http://ayenende.com/projects/rhino-mocks.aspx" rel = "nfollow noreferrer"> Rhino se moque . Cela vous fera économiser beaucoup de temps. P>
Deuxièmement, évitez de créer des simulacres dans la mesure du possible et collez-les aux embouts. Les talons de retournent juste des valeurs; Vous n'avez pas affirmé contre eux. Au lieu de cela, vous affirmez que l'état de la classe à l'essai est ce que vous attendiez. Utilisez des talons pour encercler des dépendances injectées. P>
Ceci est un sujet complexe et vous devrez faire une certaine lecture. Osherove's Art of Unit Test est bon marché dans son formulaire de livre électronique et fait un très bon travail d'explication cette. Vous voudrez également lire sur Injection de dépendance . P>
N'oubliez pas que vous n'avez pas besoin de faux, de moqueurs ou de talons pour tester de nombreuses classes. Le but est de tester le comportement public de la classe actuelle de manière isolée. Façons sont simplement un outil pour vous aider à isoler la classe de toutes les dépendances. P>
Vos exemples se concentrent sur des façons, des interfaces et des tests. Concentrez-vous sur la classe sous test et son comportement souhaité. P>
Les tests d'intégration ont aussi une valeur; Vous pouvez tout câbler jusqu'à une base de données de test et vous assurer que tout fonctionne. Ils ont tendance à être lents, par opposition aux tests unitaires. P>
edit strud>: maintenant je lis Software en croissance orienté objet, guidé par des tests et interrogatifs mon point de vue" Évitez les moqueurs ". Si vous avez des objets qui suivent Tell, ne demandez pas puis que les tests d'état peuvent être difficiles . P>
Dans votre exemple, vous testez votre faux. Vous ne pouvez pas comprendre cela, car cela n'a pas de sens.
Voici un exemple de la façon dont vous devriez utiliser un faux. Vous souhaitez tester la classe de documentsGenerator. Cette classe arrive à utiliser les services d'un articlePlaterePosity. Cependant, pour obtenir correctement le programme de documents de test, vous souhaitez vous assurer qu'il ne dépend de aucun service externe. Donc, vous fournissez de la documentation génératrice avec un faux élémentPllatérers qui retournera des résultats en conserve. P>
Voici ce que le code ressemble. P> Le gist de l'exemple est que vous testez
Que se passe-t-il si le documentGenartor n'accepte pas un référentiel mais plutôt une valeur de chaîne de quelque chose qui est renvoyé du référentiel? i.e.documentgenerator (modèle de chaîne). Si je devais faire quelque chose comme ça, cela suggère-t-il que j'ai tort le design?
Si DocumentGenartor ne prend qu'une chaîne, vous n'avez pas besoin du faux objet. Vous n'avez besoin que de créer de faux objets pour les collaborateurs, l'unité sous test utilise réellement.
Eh bien, donnez à votre code ce qu'il veut ne sera pas très utile, car les tests de sa forme la plus simple sont, je suppose que "la mettre à travers ses pas".