with verifiable unit test setup property net mocks mock .net unit-testing mocking moq

.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