2012-01-31 29 views
5

Tôi đang cố gắng nâng cao sự kiện trong giao diện giả. Tôi có thể nhận được điều này trong C#, nhưng đối với một số lý do đau-in-the-mông không thể làm cho nó hoạt động trong VB.Net. Nếu ai đó có thể giúp tôi với tình huống này, tôi sẽ đánh giá cao nó. Hy vọng rằng tôi đã không bỏ lỡ thuyền khái niệm và tất cả tôi đang thiếu là một số cú pháp. Điều này tương tự mã Tôi đang làm việc với:Làm cách nào để tăng sự kiện bằng cách sử dụng 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 

Tôi đã hy vọng để có được một bài kiểm tra đó nhìn cái gì đó như chạy này:

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 

bất cứ ai có thể giúp tôi để hoàn thành hoặc sửa dòng trong lớp thử nghiệm của tôi bắt đầu "sendable.Raise ..."? Có lẽ có nhiều thiết lập tôi cần phải làm, nhưng trang web Moq dường như không chỉ ra đây là trường hợp.

Xin cảm ơn trước.

Trả lời

5

Với dòng này thử nghiệm của bạn là màu xanh lá cây:

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

Bạn cũng cần phải tạo ra một "mô hình" xử lý sự kiện để làm cho nó làm việc:

Sub MockHandler() 

End Sub 

EDIT:

tôi m không phải là một anh chàng VB, do đó, nó đường nối có một cú pháp ngắn hơn với việc sử dụng một phương thức vô danh nội tuyến thay vì MockHandler: :

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

Tuyệt vời, nemesv - chỉ là những gì tôi đã làm sau. Cảm ơn bạn đã trả lời quá nhanh. – RobC

Các vấn đề liên quan