Je crois comprendre que je peux tester qu'un appel de méthode se produira si j'appelle une méthode de niveau supérieur, c'est-à-dire:
public abstract class SomeClass()
{
public void SomeMehod()
{
SomeOtherMethod();
}
internal abstract void SomeOtherMethod();
}
Je veux tester que si j'appelle, SomeMethod()
je m'attends à ce que SomeOtherMethod()
cela soit appelé.
Ai-je raison de penser que ce type de test est disponible dans un cadre moqueur?
Non, les tests simulés supposent que vous utilisez certains modèles de conception testables, dont l'injection. Dans votre cas, vous testeriez
SomeClass.SomeMethod
etSomeOtherMethod
devez être implémenté dans une autre entité qui doit être interfacée.Votre
Someclass
constructeur ressemblerait àNew(ISomeOtherClass)
. Ensuite, vous vous moquez de l'ISomeOtherClass
attente et définissez l'attente sur sonSomeOtherMethod
appel et vérifiez l'attente.la source
Même si je suis d'accord pour dire que la réponse de @ Paul est la voie recommandée, je veux juste ajouter une voie alternative qui est fournie par
moq
le soi.Puisqu'il
SomeClass
estabstract
en effet moquable, maispublic void SomeMehod()
ne l'est pas. Le but est de trouver le moyen de se moquer et d'appeler d'une manière ou d'une autre cette méthode, puis d'utiliserCallBase
propager l'appel auSomeOtherMethod()
. Cela peut sembler un piratage, mais c'est simple par essence. Il pourrait être utilisé dans le cas où le refactoring proposé n'est pas possible.Ensuite, vous pouvez configurer
DummyMethod()
pour propager l'appel en définissant unCallBase
indicateur.la source