2012-10-22 36 views
5

एक अंतरफलकमजाक eventhandler

public interface IHandlerViewModel { 
     EventHandler ClearInputText { get; } 
} 

मैं अगर ClearInputText कुछ विधि से शुरू हो जाती है परीक्षण करना चाहते हैं परिभाषित करने के बाद। मैं इस

SomeType obj=new SomeType(); 
bool clearCalled = false; 
var mockHandlerViewModel=new Mock<IHandlerViewModel>(); 
mockHandlerViewModel.Setup(x => x.ClearInputText).Returns(delegate { clearCalled = true; }); 

obj.Call(mockHandlerViewModel.Object);//void Call(IHandlerViewModel); 
Assert.IsTrue(clearCalled); 

जो विफल रहता है की तरह कुछ कर ऐसा करने के लिए। बस प्रतिनिधि को बुलाया नहीं जाता है। कृपया इसके साथ मेरी मदद करें।

+2

प्रतिनिधि {copyCalled = true;} -> प्रतिनिधि {clearCalled = true;} –

+0

कृपया कोड जोड़ें जहां आप वास्तव में ईवेंट हैंडलर को कॉल कर रहे हैं –

उत्तर

8

आपके द्वारा दिया गया उदाहरण स्पष्ट नहीं है। आप अनिवार्य रूप से अपने खुद के नकली परीक्षण कर रहे हैं।

एक परिदृश्य में जहां मॉक प्रॉक्सी परीक्षण के तहत किसी ऑब्जेक्ट पर निर्भरता के रूप में पारित किया जाता है, तो आप ईवेंट हैंडलर को सेट अप नहीं करते हैं, आप इसे उठाते हैं।

var mockHandlerViewModel = new Mock<IHandlerViewModel>(); 
var objectUnderTest = new ClassUnderTestThatTakesViewModel(mockHandlerViewModel.Object); 
// Do other setup... objectUnderTest should have registered an eventhandler with the mock instance. Get to a point where the mock should raise it's event.. 

mockHandlerViewModel.Raise(x => x.ClearInputText += null, new EventArgs()); 
// Next, Assert objectUnderTest to verify it did what it needed to do when handling the event. 

Mocks या तो .Raise() का उपयोग करके घटना स्रोत विकल्प हैं, या वे एक वस्तु है कि परीक्षण के कार्यक्रम के तहत एक और वर्ग की खपत होगी स्थानापन्न (जताने में घटना उठाया गया था), जिस स्थिति में आप .Callback का उपयोग करें () स्थानीय ध्वज चर में घटना को "हैंडलिंग" रिकॉर्ड करने के लिए।