Utiliser Moq pour déterminer si une méthode est appelée

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.