2010-09-16 11 views
9

Nei miei test di unità sto prendendo in giro un metodo protetto usando Moq e vorrei affermare che è chiamato un certo numero di volte. This question descrive qualcosa di simile per una versione precedente di Moq:Verificare il numero di volte in cui un metodo protetto viene chiamato utilizzando Moq

//expect that ChildMethod1() will be called once. (it's protected) 
testBaseMock.Protected().Expect("ChildMethod1") 
    .AtMostOnce() 
    .Verifiable(); 

... 
testBase.Verify(); 

ma questo non funziona più; la sintassi è cambiato da allora e non riesco a trovare il nuovo equivalente utilizzando Moq 4.x:

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

... 
testBase.Verify(); 

risposta

17

Nel Moq.Protected namespace, non v'è un'interfaccia IProtectedMock che ha un metodo Verifica prendendo Times come un parametro.

Modifica Questo è disponibile da almeno Moq 4.0.10827. esempio di sintassi:

testBaseMock.Protected().Setup("ChildMethod1"); 

... 
testBaseMock.Protected().Verify("ChildMethod1", Times.Once()); 
4

per aumentare la risposta di Ogata, possiamo anche verificare un metodo protetto che prende argomenti:

testBaseMock.Protected().Setup(
    "ChildMethod1", 
    ItExpr.IsAny<string>(), 
    ItExpr.IsAny<string>()); 

testBaseMock.Protected().Verify(
    "ChildMethod1", 
    Times.Once(), 
    ItExpr.IsAny<string>() 
    ItExpr.IsAny<string>()); 

Per esempio, sarebbe verificare ChildMethod1(string x, string y).

Vedere anche: http://www.nudoq.org/#!/Packages/Moq.Testeroids/Moq/IProtectedMock(TMock)/M/Verify

Problemi correlati