Je comprends que je peux tester qu’un appel de méthode se produira si j’appelle une méthode de niveau supérieur, à savoir:
public abstract class SomeClass() { public void SomeMehod() { SomeOtherMethod(); } internal abstract void SomeOtherMethod(); }
Je veux tester que si j’appelle SomeMethod()
alors je m’attends à ce que SomeOtherMethod()
soit appelé.
Ai-je raison de penser que ce type de test est disponible dans un cadre moqueur?
Vous pouvez voir si une méthode dans quelque chose que vous avez moqué a été appelée en utilisant Vérifier, par exemple:
static void Main(ssortingng[] args) { Mock mock = new Mock (); ClassBeingTested testedClass = new ClassBeingTested(); testedClass.WorkMethod(mock.Object); mock.Verify(m => m.MethodToCheckIfCalled()); } class ClassBeingTested { public void WorkMethod(ITest test) { //test.MethodToCheckIfCalled(); } } public interface ITest { void MethodToCheckIfCalled(); }
Si la ligne est laissée en commentaire, elle lancera une MockException lorsque vous appelez Verify. S’il est décommenté, il passera.
Non, les tests simulés supposent que vous utilisez certains modèles de conception testables, dont l’injection. Dans votre cas, vous SomeOtherMethod
SomeClass.SomeMethod
et SomeOtherMethod
doivent être implémentés dans une autre entité devant être interfacée.
Votre constructeur Someclass
ressemblera à New(ISomeOtherClass)
. Ensuite, vous ISomeOtherClass
et définir l’attente sur son SomeOtherMethod
pour être appelé et vérifier l’attente.