Si je devais écrire une bibliothèque moqueuse, comment cela fonctionnerait-il (en d'autres termes, comment "fonctionnent-ils"?
Une des choses que je me demande est que vous définissez toujours des attentes si vraiment vous avez besoin Pour comparer l'attente à la méthode de l'exécution, donc je suppose que la réflexion (types de résolution au moment de l'exécution) est requise. P>
Aussi, lorsque vous utilisez le terme "objet simulé", est l'objet stupéfait ou c'est un objet avec des attentes pré-définies? P>
Quand je pense comment j'écrirais ma propre mise en œuvre d'un cadre / technique, comme des objets simulés, je réalise à quel point je sais vraiment (ou je ne sais pas ) Et ce que je trotterais sur: Si l'objet simulé est pré-programmé pour renvoyer des attentes définies et que vous n'appelez pas l'objet réel réel, alors le résultat ne serait-il pas toujours le même? Par exemple: P> < Pré> xxx pré>
} p>
ne serait-il pas toujours vrai? p> p>
4 Réponses :
Oui, cela retournera toujours vrai. Des objets graves doivent être utilisés lorsque la classe sous test nécessite une autre implémentation de classe que vous ne souhaitez pas impliquer dans le test. Ceci est très utile lorsque c'est une classe qui utilise des interfaces avec plusieurs implémentations, ou des services complexes / coûteux / externes que vous ne souhaitez pas configurer. P>
Dans le code ci-dessus, vous vous moquez de la classe que vous "tester". p>
Une autre façon de penser est que les comportements mock que vous enregistrez sont des assertions de boîte noire (implémentation), où affirme. * code> sont des affirmations de boîte blanche (API). P>
Vu d'une autre manière, des objets simulés ne sont qu'une autre couche d'indirection au-dessus du retour (vrai) ou commentant que vous auriez à utiliser dans leur position.
Vous avez la bonne idée. Vous constaterez souvent qu'ils ont quelques modes de fonctionnement. Si vous craignez que votre méthode ne soit pas appelée ou qu'elle ne soit pas appelée dans le bon ordre, il y a assez souvent un mode «strict» qui provoque une fausse framework si la méthode n'est pas appelée à la fin de la test, ou est appelé avec les mauvais paramètres, etc. P>
La plupart des cadres ont pensé à ces types de problèmes afin que vous ne puissiez simplement pas savoir comment le configurer pour votre scénario. P>
L'idée avec des cadres moqueurs est de se moquer de dépendances, et non des classes réelles à tester. Pour votre exemple, votre test reviendra toujours vrai, car vous n'êtes vraiment testé que le cadre moqueur et non votre code réel!
Un monde réel simulateur ressemblerait plus à ceci: P>
public void MethodReturnInt(int value, string value2) {
Assert.Equal(3, value);
Assert.Equal("abc", value2);
return 10;
}
Merci. Pouvez-vous expliquer comment le code que j'ai fourni des tests le cadre moqueur et le code réel (peut-être que je suis un peu lent)?
Merci pour ça. Je peux avoir une méthode qui repose sur une certaine date / heure pour effectuer une action, mais si ma méthode renvoie réellement l'heure actuelle (l'essence de la méthode est quelque chose qui se moque généralement)? Comment puis-je tester cela? Si une méthode fait quelque chose à 12h du matin, je teste le "quelque chose", mais si ma méthode renvoie l'heure, comment tester cela?
@DotNetDev - jetez un coup d'œil à cette question: Stackoverflow.com/questions/565289/... efficacement, vous devez effectivement casser la dépendance DateTime dans votre code
Une façon de regarder comment le travail du système simulé est juste un aspect des moments où vous avez besoin d'un objet, mais que vous ne voulez pas utiliser la classe réelle, mais que vous voulez plutôt que cela vous donne un type de données spécifique qu'il ne ferait pas (ou ne fera pas si de manière fiable). Donc, si vous voyez:
Assert.IsTrue(myLogic.IsNoon(time))