J'ai une expérience du développement C++/non-.NET et je me suis récemment intéressé à .NET. J'avais donc certaines attentes lorsque j'ai utilisé Moq pour la première fois. J'essayais de comprendre ce qui se passait avec mon test et pourquoi le code que je testais lançait une exception aléatoire au lieu que la bibliothèque Mock me dise quelle fonction le code essayait d'appeler. J'ai donc découvert que j'avais besoin d'activer le comportement Strict, ce qui m'a laissé perplexe - et puis je suis tombé sur cette question qui n'avait pas encore de réponse cochée.
En Loose et le fait qu'il s'agisse du mode par défaut. est fou . Quel est l'intérêt d'une bibliothèque Mock qui fait quelque chose de complètement imprévisible que vous n'avez pas explicitement listé comme devant être fait ?
Je ne suis absolument pas d'accord avec les points énumérés dans les autres réponses à l'appui du mode Loose. Il n'y a aucune bonne raison de l'utiliser et je ne le voudrais jamais, jamais. Lorsque j'écris un test unitaire, je veux être certain de ce qui se passe - si je sais qu'une fonction doit retourner un null, je lui ferai retourner ce null. Je veux que mes tests soient fragiles (dans les aspects qui comptent) afin que je puisse les corriger et ajouter à la suite de code de test les lignes de configuration qui sont les informations explicites qui me décrivent exactement ce que mon logiciel va faire.
La question est la suivante : existe-t-il une manière standard et normale de procéder ?
Oui - du point de vue de la programmation en général, c'est-à-dire des autres langages et en dehors du monde .NET, vous devriez toujours utiliser Strict. Dieu seul sait pourquoi ce n'est pas la valeur par défaut dans Moq.