2010-09-16 18 views
9

का उपयोग कर मेरी यूनिट-परीक्षण में मैं एक संरक्षित विधि Moq का उपयोग कर मजाक कर रहा हूँ कहा जाता है की संख्या सत्यापित करें, और बात पर जोर देना है कि यह समय की एक निश्चित संख्या में कहा जाता है चाहते हैं। This question Moq के पिछले संस्करण के लिए कुछ इसी तरह का वर्णन:बार एक संरक्षित विधि Moq

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

... 
testBase.Verify(); 

लेकिन यह नहीं रह गया काम करता है; वाक्य रचना तब से बदल गया है और मैं Moq 4.x का उपयोग कर नए बराबर नहीं मिल सकता है:

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

... 
testBase.Verify(); 

उत्तर

17

Moq.Protected नाम स्थान में, वहाँ एक सत्यापित करें विधि टाइम्स एक पैरामीटर के रूप ले रही है कि एक IProtectedMock इंटरफेस है।

संपादित यह कम से कम Moq 4.0.10827 के बाद से उपलब्ध है। सिंटेक्स उदाहरण:

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

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

उदाहरण के लिए, कि ChildMethod1(string x, string y) सत्यापित करेंगे,:

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

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