Cela semble être quelque chose de simple mais je n'arrive pas à le faire fonctionner.Comment vérifier qu'une autre méthode de la classe a été appelée à l'aide de Moq
J'ai une classe avec une méthode Save qui appelle simplement une autre méthode ShouldBeCalled(). Je veux vérifier que si j'appelle Save() que l'autre méthode ShouldBeCalled() est exécutée au moins une fois. Je pensais que je pourrais faire ce qui suit.
public class ClassA
{
public virtual void Save()
{
ShouldBeCalled();
}
public virtual void ShouldBeCalled()
{
//This should get executed
}
}
[TestFixture]
public class ClassA_Test
{
[Test]
public void Save_Should_Call_ShouldBeCalled()
{
var mockClassA = new Mock<ClassA>();
mockClassA.Object.Save();
mockClassA.Verify(x => x.ShouldBeCalled(), Times.AtLeastOnce());
}
}
Mais je reçois l'exception « invocation sur la maquette Expected au moins une fois, mais n'a jamais été effectuée: x => x.ShouldBeCalled() »
Il est juste une supposition, mais est-Moq Redéfinition de la Save() méthode avec sa propre version qui ignore tout ce que j'ai dans la méthode Save() de l'objet réel.
+1: Grande réponse, complète avec les exemples de dépendance et de code! Notez qu'une alternative à la méthode virtuelle serait d'ajouter une interface IBusinessLogic et de la transmettre. – TrueWill
L'interface IBusinessLogic est certainement le moyen d'aller ici, mais je ne voulais pas m'y plonger trop profondément. –
Merci pour la bonne réponse. J'ai eu le sentiment que j'essayais de faire quelque chose de mal avec mon approche et maintenant je sais que je l'étais :) – Adam