Esto parece algo simple pero parece que no puedo hacer que funcione.Cómo verificar que se haya utilizado otro método de la clase con Moq
Tengo una clase con un método Save que simplemente llama a otro método ShouldBeCalled(). Quiero verificar que si llamo a Save() que el otro método ShouldBeCalled() se ejecute al menos una vez. Pensé que podría hacer lo siguiente.
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());
}
}
pero me da la excepción "invocación previstos en los simulacros al menos una vez, pero nunca se llevó a cabo: x => x.ShouldBeCalled()"
Es sólo una suposición, sino que se Moq reemplazando el El método Save() con su propia versión que ignora todo lo que tengo dentro del método Save() del objeto real.
+1: ¡Excelente respuesta, completa con los ejemplos de dependencia y código! Tenga en cuenta que una alternativa al método virtual sería agregar una interfaz IBusinessLogic y pasarla. – TrueWill
La interfaz de IBusinessLogic es definitivamente el camino a seguir aquí, pero no quería profundizar en ella. –
Gracias por la gran respuesta. Tenía la sensación de que estaba tratando de hacer algo mal con mi enfoque y ahora sé que estaba :) – Adam