.net - verifiable - Verifica la cantidad de veces que se llama un método protegido usando Moq
unit testing with mocks (2)
En mis pruebas unitarias estoy burlando de un método protegido usando Moq, y me gustaría afirmar que se llama una cierta cantidad de veces. Esta pregunta describe algo similar para una versión anterior de Moq:
//expect that ChildMethod1() will be called once. (it''s protected)
testBaseMock.Protected().Expect("ChildMethod1")
.AtMostOnce()
.Verifiable();
...
testBase.Verify();
pero esto ya no funciona; la sintaxis ha cambiado desde entonces y no puedo encontrar el nuevo equivalente usando Moq 4.x:
testBaseMock.Protected().Setup("ChildMethod1")
// no AtMostOnce() or related method anymore
.Verifiable();
...
testBase.Verify();
En el espacio de nombres Moq.Protected , hay una interfaz IProtectedMock que tiene un método Verify tomando Times como parámetro.
Editar Esto está disponible desde al menos Moq 4.0.10827. Ejemplo de sintaxis:
testBaseMock.Protected().Setup("ChildMethod1");
...
testBaseMock.Protected().Verify("ChildMethod1", Times.Once());
Para aumentar la respuesta de Ogata, también podemos verificar un método protegido que tome argumentos :
testBaseMock.Protected().Setup(
"ChildMethod1",
ItExpr.IsAny<string>(),
ItExpr.IsAny<string>());
testBaseMock.Protected().Verify(
"ChildMethod1",
Times.Once(),
ItExpr.IsAny<string>()
ItExpr.IsAny<string>());
Por ejemplo, eso verificaría ChildMethod1(string x, string y)
.
Ver también: http://www.nudoq.org/#!/Packages/Moq.Testeroids/Moq/IProtectedMock(TMock)/M/Verify