Jusqu'à présent, j'ai l'habitude d'écrire des interfaces à ces classes que je veux me moquer/faux. La raison pour laquelle ces classes n'ont aucune méthode virtuelle pour écraser. Mais vraiment, j'ai compris que je pouvais également utiliser des méthodes virtuelles.
Quand devrais-je utiliser des méthodes virtuelles plutôt que des interfaces?
Devrais-je même faire la plupart des méthodes virtuelles pour faire de la simulation plus facile à l'avenir?
Comment les méthodes virtuelles aideraient-elles? L'idée de moquer de la moqueur est que vous éliminez une classe complètement de votre application et branchez une classe moquée complètement différente, avec la seule chose commune qu'ils implémentent la même interface. L'héritage ne vient pas du tout dans le jeu.
Je préfère faire des méthodes virtuelles sur l'extraction d'une interface. Le succès de la performance est négligeable. En Java, où des méthodes sont virtuelles par défaut, les gens ne s'inquiètent pas de cela presque autant.
J'ai vu beaucoup trop de codesbases où chaque classe a une interface correspondante dans la même espace de noms. Cela rend le projet déroutant, car vous ne savez pas si un type d'interface est une abstraction ou simplement un artefact de test.
Je ne dirais pas que l'utilisation de virtual
méthode de moqueur est une mauvaise idée. C'est encore un autre outil pour le travail.
Je comparais la moqueur via interface VS Délégée VS Méthode virtuelle en C # dans cet article . Comme vous pouvez le constater virtual
option méthode semble attrayante en raison des changements de code les plus petits pour soutenir la possibilité de moqueur, bien sûr au coût du compromis.
Les méthodes virtuelles et les déroberts ne sont pas un bon moyen de faire des simulacres par rapport aux interfaces.
Parce que vous devrez faire référence à la classe sous-jacente pour créer votre simulacre. Donc, vos tests dépendront d'une référence à cette bibliothèque particulière
Et aussi parce que vous allez exposer des méthodes que vous ne voudrez pas non plus.
Si vous avez besoin de faire vos méthodes virtuelles afin de les tester (c'est-à-dire l'expansion de l'API publique de votre classe uniquement pour accueillir vos tests d'unité), alors c'est un bon signe que votre classe a trop de travail à faire.
Vous pouvez résoudre ce problème en refactorisant votre classe et en déplaçant le code de votre tentative d'exposer dans sa propre unité et d'injecter une instance de votre nouvelle unité dans la classe d'appel.