2012-01-31 13 views
5

Estoy tratando de plantear un evento en una interfaz simulada. Puedo obtener esto en C#, pero por alguna razón dolorosa no puedo hacer que funcione en VB.Net. Si alguien pudiera ayudarme con esta situación, lo agradecería. Con suerte no me he perdido el bote conceptualmente y todo lo que me falta es algo de sintaxis. Esto es similar al código que estoy trabajando con:¿Cómo puedo plantear un evento usando 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 

Tenía la esperanza de obtener una prueba de que parecía algo como esto en marcha:

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 

¿Puede alguien ayudarme a completar o corregir la línea en mi clase de prueba que comienza "sendable.Raise ..."? Tal vez haya más configuración que deba hacer, pero el sitio de Moq no parece indicar que este sea el caso.

Gracias de antemano.

Respuesta

5

Con esta línea de la prueba es de color verde:

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

También es necesario crear un controlador de eventos "simulacro" de hacer que funcione:

Sub MockHandler() 

End Sub 

EDIT:

I' m no es un tipo VB, por lo que se ve que hay una sintaxis más corta al usar un método anónimo en línea en lugar de MockHandler: :

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

Excelente, nemesv - justo lo que buscaba. Gracias por contestar tan rápido. – RobC

Cuestiones relacionadas