2012-01-31 16 views
5

私は虚偽のインターフェイスでイベントを発生させようとしています。私はC#でこれを得ることができますが、いくつかの苦痛のために、その理由は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 

誰もがラインを完了するか、修正するために私を助けることができます私のテストクラスでは "sendable.Raise ..."に始まります。たぶん、私がする必要があるより多くのセットアップがありますが、Moqのサイトではこれがそうであるとは思われませんでした。

ありがとうございます。このラインでは

答えて

5

テストが緑色である:

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

あなたはまた、それを動作させるために "モック" イベントハンドラを作成する必要があります。

Sub MockHandler() 

End Sub 

EDIT:

私は」私はVBの人ではないので、MockHandlerの代わりにインラインの匿名メソッドを使用すると短い構文があります。 :

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

優秀な、nemesv - 私が後にしたもの。とても素早く答えてくれてありがとう。 – RobC

関連する問題