2010-09-16 14 views
9

W moich testach jednostkowych kpię z metody chronionej za pomocą Moq i chciałbym potwierdzić, że jest ona nazywana określoną liczbą razy. This question opisuje coś podobnego do wcześniejszej wersji Min:Sprawdź, ile razy metoda chroniona jest wywoływana za pomocą Moq

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

... 
testBase.Verify(); 

ale to już nie działa; składnia się zmieniło od tamtego czasu i nie mogę znaleźć nowego odpowiednika przy użyciu MOQ 4.x:

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

... 
testBase.Verify(); 

Odpowiedz

17

W nazw Moq.Protected istnieje interfejs IProtectedMock że ma metodę Weryfikuj biorąc razy jako parametr.

Edytuj Jest to dostępne od co najmniej Moq 4.0.10827. Składnia przykład:

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

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

Aby powiększać za odpowiedź Ogata, możemy również zweryfikować chronioną metodę, która pobiera argumenty:

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

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

Na przykład, że będzie zweryfikować ChildMethod1(string x, string y).

Zobacz także: http://www.nudoq.org/#!/Packages/Moq.Testeroids/Moq/IProtectedMock(TMock)/M/Verify

Powiązane problemy