¿Cómo verificar que el método no fue llamado en Moq?
¿Cómo puedo verificar 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 usar una nueva sintaxis:
mock.Verify(foo => foo.Execute("ping"), Times.Never());
5 answers
ACTUALIZACIÓN: Desde la versión 3, verifique la actualización a la pregunta anterior o la respuesta de Dann a continuación.
O bien, haga su mock strict para que falle si llama a un método para el que no tiene un expect
new Mock<IMoq>(MockBehavior.Strict)
O, si quieres que tu burla esté suelta, usa el .Lanzamientos (Excepción)
var m = new Mock<IMoq>(MockBehavior.Loose);
m.Expect(a => a.moo()).Throws(new Exception("Shouldn't be called."));
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-07-29 14:56:47
Ejecute una verificación después de la prueba que tiene un conjunto de enumeraciones Times.Never
. por ejemplo,
_mock.Object.DoSomething()
_mock.Verify(service => service.ShouldntBeCalled(),Times.Never());
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-08 09:59:37
Robado de: La respuesta de John Foster a la pregunta,"Necesito ayuda para entender mejor Moq"
Una de las cosas que podrías querer probar es que el método de pago no recibe una llamada cuando una persona mayor de 65 años pasa a la 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()); }
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-01 15:35:19
Esto no funciona en versiones recientes de Moq (desde al menos 3.1), debe especificarse en el método
Verify
como se menciona en el respuesta.
En realidad, es mejor especificar .AtMost(0)
después de la instrucción Returns.
var m = new Mock<ISomething>();
m.Expect(x => x.Forbidden()).Returns("foo").AtMost(0);
Aunque el "lanza" también funciona, AtMost(0)
es más expresivo EN mi humilde opinión.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-11 11:41:27
Uso .AtMostOnce ();
Después de la prueba real, llame al método de nuevo. Si lanza una excepción, se llama.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-02-11 15:59:01