2010-09-16 9 views
9

En mis pruebas unitarias me estoy burlando de un método protegido usando Moq, y me gustaría afirmar que se llama una cierta cantidad de veces. This question describe algo similar para una versión anterior de Moq:Verificar el número de veces que se llama a un método protegido usando 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 utilizando 4.x Moq:

testBaseMock.Protected().Setup("ChildMethod1") 
    // no AtMostOnce() or related method anymore 
    .Verifiable(); 

... 
testBase.Verify(); 

Respuesta

17

En el espacio de nombres Moq.Protected, existe una interfaz IProtectedMock que tiene un método Verificar tiempos de toma 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()); 
4

para aumentar la respuesta de Ogata, podemos también comprobar un método protegido que toma 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, habría que verificar ChildMethod1(string x, string y).

Ver también: http://www.nudoq.org/#!/Packages/Moq.Testeroids/Moq/IProtectedMock(TMock)/M/Verify

Cuestiones relacionadas