D'après ce que j'ai compris, 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()
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 simulé a été appelée en utilisant Verify, par exemple:
static void Main(string[] args)
{
Mock<ITest> mock = new Mock<ITest>();
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 commentée, une exception MockException sera émise lorsque vous appelez Verify. S'il n'est pas commenté, cela passera.
Non, les tests de simulation supposent que vous utilisez certains modèles de conception testables, dont l'un est l'injection. Dans votre cas, vous testeriez SomeClass.SomeMethod
Et SomeOtherMethod
doivent être implémentés dans une autre entité qui doit être interfacée.
Votre constructeur Someclass
ressemblerait à New(ISomeOtherClass)
. Ensuite, vous vous moqueriez du ISomeOtherClass
et définiriez l'attente sur son SomeOtherMethod
à appeler et vérifieriez l'attente.