Tengo la siguiente prueba de unidad:¿Por qué mi reclamo de Moq no se está lanzando invocaciones, pero muestra la invocación lanzada en la excepción?
[TestMethod]
public void Execute_Sends_Email_To_User()
{
// Setup
InitializeTestEntities();
_mock.Setup(x => x.Send(It.Is<string>(y => y == _user.Email),
It.IsAny<string>(), It.IsAny<string>()));
// Act
new ResetUserPasswordCommand(_unitOfWork,
_mock.Object).WithUserId(_user.Id).Execute();
// Verify
_mock.Verify(x => x.Send("", "", ""), Times.Once());
}
Cuando esto pasa, me sale el siguiente mensaje de excepción
Test method
MyApp.Tests.Commands.Users.ResetUserPasswordCommandTests.Execute_Sends_Email_To_User
threw exception:
Moq.MockException:
Expected invocation on the mock once, but was 0 times: x => x.Send("", "", "")
Configured setups:
x => x.Send(It.Is<String>(y => y == ._user.Email), It.IsAny<String>(),
It.IsAny<String>()), Times.Once
Performed invocations:
IEmailUtils.Send("[email protected]", "Password Recovery",
"Your new password is: 7Xb79Vb9Dt")
estoy confundido acerca de esto, porque se dice que la maqueta se invocked 0 veces , sin embargo, muestra que la invocación exitosa. ¿Qué estoy haciendo mal?
¡Oh, funcionó! ¿Cuál es el punto del método 'Setup()'? – KallDrexx
Con el método Setup/Verify, la única razón por la que usaría el programa de instalación sería devolver los argumentos. Todavía puede verificar que se haya llamado a un método si no hay configuración, siempre que no haya tenido que devolver nada. Esto en efecto se convierte en un Stub, pero a diferencia de Rhino Moq usa el programa de instalación porque realmente no hay diferencia entre un Mock y un Stub internamente, realmente es como lo usas. Algunas personas pueden estar en desacuerdo, pero mantiene las cosas más simples, más conectadas y las pruebas se pueden enfocar en una cosa y no preocuparse por un llamado a un simulacro que debería o no debería haber sucedido. – aqwert