2012-01-31 9 views
5

Alaylanmış bir arayüzde bir etkinliği yükseltmeye çalışıyorum. Bunu C# 'da alabilirim, ama bazı acı-için-ama-neden-sebepten dolayı VB.Net'te çalışamıyorum. Birisi bana bu durumla yardım ederse, minnettar olurum. Umarım tekneyi kavramsal olarak gözden kaçırmadım ve tek eksik olduğum şey, bazı sözdizimi.Bir olayı Moq kullanarak nasıl yükseltebilirim?

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 

bu koşu gibi bir şey görünüyordu bir test almayı umuyordum:

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 

kimse tamamlamak veya çizgiyi düzeltmek için bana yardımcı olabilir

Bu benim ile çalışıyorum koda benzer test sınıfımda "sendable.Raise ..." başlıyor? Belki de yapmam gereken daha fazla kurulum var, ama Moq sitesi bu durumun böyle olduğunu göstermedi.

Şimdiden teşekkürler. Bu hat sayesinde

cevap

5

test yeşildir:

Sub MockHandler() 

End Sub 

DÜZENLEME:

Ben

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

Ayrıca çalışması için bir "sahte" olay işleyicisi oluşturmak için gereken m VB olmayan bir adam değildir, bu nedenle, MockHandler: :

yerine bir satır içi anonim yöntem kullanıldığında daha kısa bir sözdizimi vardır.
sendable.Raise(Sub(e) AddHandler e.SendMessage, Function() vbEmpty, announcement) 
+0

Mükemmel, nemesv - tam da peşindeydim. Çok hızlı cevap verdiğiniz için teşekkürler. – RobC