Supposons que nous voulions faire des steaks.
public void MakeSteakTest() { var rawSteak = new Steak(); this.restaurant.MakeSteak(rawSteak); this.KitchenServices.Verify(x => x.AddSeasoning(rawSteak) , Times.Once); this.KitchenServices.Verify(x => x.Grill(rawSteak) , Times.Once); }
3 Réponses :
généralement em> vous devez tester les résultats em>, pas implémentation em> dans un test d'unité. Que se passe-t-il dans votre système si makesteak code> a été modifié afin que les opérations soient dans un ordre différent? Est-ce quelque chose qui est observable? Étant donné que votre seule inveille est un objet code> steak code>, existe-t-il une sorte de validation qui échoue si
grill code> est appelé avant
additionning code>? que em> est ce que vous devriez tester. p>
Je conviens que nous devrions généralement éviter de tester les détails de la mise en œuvre, mais que s'il existe une logique commerciale qui applique que nous devons toujours assainir le steak avant de le griller, comment puis-je vous assurer que cette prémisse n'est pas brisée dans les changements futurs?
Encore une fois, qu'est-ce que arrive i> si vous appelez les méthodes dans un ordre différent? Quelque chose change-t-il dans l'état du système? Est une exception projetée? Si rien ne change, alors pourquoi cela compte-t-il de l'ordre dans lequel ils sont appelés?
Une solution serait de représenter chaque opération en tant qu'objet de commande qui fonctionne sur le steak, par exemple puis renvoyer une séquence d'opérations: p> Ensuite, votre test peut affirmer que tout gril op est surviennent avant tout assaisonnement: p>
Ma question est que nous devrions avoir un test pour vous assurer que le steak n'est pas assaisonné après sa grillée? P> blockQuote>
Premier: a-t-il un effet sur le comportement visible par l'utilisateur / intervenant final, et se soucient-ils? P>
Si oui, comment? p> blockQuote>
ALORS: P>
- Comment est-ce que le problème est capable de détecter cet effet sur le comportement? Utilisez cette même méthode dans votre test. LI>
- Quel est le comportement que l'utilisateur attend? Utilisez cette attente dans votre test. LI> ul>
Cela pourrait sembler "trop simple" / "de manière limitée", mais je suis totalement sérieux. C'est la définition des tests de comportement appropriés. P>
Dupliqué possible de Comment tester la méthode Commande d'appels avec MOQ