2012-01-31 9 views
5

मैं एक मॉक इंटरफ़ेस में एक ईवेंट को बढ़ाने की कोशिश कर रहा हूं। मैं इसे सी # में प्राप्त कर सकता हूं, लेकिन कुछ दर्द-में-बट कारणों से यह VB.Net में काम नहीं कर सकता है। अगर कोई इस स्थिति से मेरी मदद कर सकता है, तो मैं इसकी सराहना करता हूं। उम्मीद है कि मैंने नाव को अवधारणा से याद नहीं किया है और जो कुछ भी मैं याद कर रहा हूं वह कुछ वाक्यविन्यास है।मैं Moq का उपयोग करके एक ईवेंट कैसे बढ़ा सकता हूं?

Public Interface ISendable 

Event SendMessage(message As String) 

End Interface 

''********** 

Public Interface IPrintable 

Sub PrintAnnouncement(announcement As String) 

End Interface 

'****** 

Public Class BulletinBoard 

Private mPrintable As IPrintable 

Public Sub New(sendable As ISendable, printable As IPrintable) 
    AddHandler sendable.SendMessage, AddressOf GetItOut 
    mPrintable = printable 
End Sub 

Public Sub GetItOut(message As String) 
    'Do some stuff I can verify happened with Moq 
    mPrintable.PrintAnnouncement(message) 
End Sub 
End Class 

मैं एक परीक्षण है कि इस तरह कुछ चल रहा है देखा पाने के लिए उम्मीद कर रहा था:

Imports NUnit.Framework 
Imports Moq 

<TestFixture()> _ 
Public Class SendMessageTests 

<Test()> _ 
Public Sub canRaiseEvent() 
    Dim announcement As String = "What the?" 
    Dim sendable As New Mock(Of ISendable)() 
    Dim printable As New Mock(Of IPrintable)() 

    Dim bb As New BulletinBoard(sendable.Object, printable.Object) 
    'What is the syntax for raising sendable's event? 
    'sendable.Raise(....?) 

    printable.Verify(Sub(d) d.PrintAnnouncement(announcement), Times.Once()) 

End Sub 

End Class 

किसी को भी मेरी मदद कर सकते को पूरा करने या लाइन सही करने के लिए इस कोड के साथ मैं काम कर रहा हूँ के समान है मेरी टेस्ट क्लास में "भेजने योग्य .राइज ..." शुरू होता है? हो सकता है कि मुझे और अधिक सेटअप करने की ज़रूरत है, लेकिन मोक साइट यह इंगित नहीं करती कि यह मामला है।

अग्रिम धन्यवाद।

उत्तर

5

इस लाइन के साथ अपने परीक्षण हरा है:

sendable.Raise(Sub(e) AddHandler e.SendMessage, AddressOf MockHandler, announcement) 

तुम भी बनाने के लिए एक "नकली" ईवेंट हैंडलर बनाने की जरूरत यह काम:

Sub MockHandler() 

End Sub 

संपादित करें:

मैं एम वीबी लड़का नहीं है, इसलिए यह मोमहैंडलर के बजाय इनलाइन अज्ञात विधि का उपयोग करने के साथ एक छोटा वाक्यविन्यास है: :

sendable.Raise(Sub(e) AddHandler e.SendMessage, Function() vbEmpty, announcement) 
+0

उत्कृष्ट, nemesv - बस मैं क्या कर रहा था। इतनी जल्दी जवाब देने के लिए धन्यवाद। – RobC

संबंधित मुद्दे