c# - net - remarks/>
¿Cómo verificar que el método NO fue llamado en Moq? (5)
Esto no funciona en las versiones recientes de Moq (desde al menos 3.1), debe especificarse en el método
Verify
como se menciona en la respuesta.
En realidad, es mejor especificar .AtMost(0)
después de la declaración de Devoluciones.
var m = new Mock<ISomething>();
m.Expect(x => x.Forbidden()).Returns("foo").AtMost(0);
Aunque los "lanzamientos" también funcionan, AtMost(0)
es IMHO más expresivo.
¿Cómo verifico que el método NO fue llamado en Moq ?
¿Tiene algo como AssertWasNotCalled?
ACTUALIZACIÓN: A partir de la versión 3.0, se puede utilizar una nueva sintaxis:
mock.Verify(foo => foo.Execute("ping"), Times.Never());
Ejecute una verificación después de la prueba que tiene un conjunto de Times.Never
. p.ej
_mock.Object.DoSomething()
_mock.Verify(service => service.ShouldntBeCalled(),Times.Never());
Robado de: La respuesta de John Foster a la pregunta "Necesito ayuda para entender mejor a Moq"
Una de las cosas que podría querer probar es que el método de pago no se llama cuando una persona mayor de 65 años pasa al método
[Test] public void Someone_over_65_does_not_pay_a_pension_contribution() { var mockPensionService = new Mock<IPensionService>(); var person = new Person("test", 66); var calc = new PensionCalculator(mockPensionService.Object); calc.PayPensionContribution(person); mockPensionService.Verify(ps => ps.Pay(It.IsAny<decimal>()), Times.Never()); }
Utilice .AtMostOnce ();
Después de la prueba real, vuelva a llamar al método. Si lanza una excepción, se llama.
ACTUALIZACIÓN : Desde la versión 3, verifique la actualización de la pregunta anterior o la respuesta de Dann a continuación.
O bien, haga que su simulacro sea estricto para que falle si llama a un método para el que no tiene una expectativa
new Mock<IMoq>(MockBehavior.Strict)
O, si desea que su simulacro se suelte, use .Throws (Excepción)
var m = new Mock<IMoq>(MockBehavior.Loose);
m.Expect(a => a.moo()).Throws(new Exception("Shouldn''t be called."));