Как я могу поднять событие, используя Moq? - PullRequest
5 голосов
/ 01 февраля 2012

Я пытаюсь вызвать событие в поддельном интерфейсе.Я могу получить это в C #, но по какой-то мучительной причине не могу заставить его работать в VB.Net.Если бы кто-то мог помочь мне с этой ситуацией, я был бы признателен.Надеюсь, я концептуально не пропустил лодку, и все, что мне не хватает, это какой-то синтаксис.Это похоже на код, с которым я работаю:

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, похоже, не указывает, что это так.

Заранее спасибо.

1 Ответ

5 голосов
/ 01 февраля 2012

С этой строкой ваш тест зеленый:

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

Вам также нужно создать обработчик «фиктивного» события, чтобы он заработал:

Sub MockHandler()

End Sub

РЕДАКТИРОВАТЬ:

Я не VB парень, так что, похоже, укороченный синтаксис с использованием встроенного анонимного метода вместо MockHandler::

sendable.Raise(Sub(e) AddHandler e.SendMessage, Function() vbEmpty, announcement)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...