Создание событий с помощью FakeItEasy в VB.Net для проверки правильности подключения обработчика - PullRequest
1 голос
/ 28 апреля 2011

Я пытаюсь проверить, правильно ли подключены обработчики событий между интерфейсом и контроллером.Система настроена, как показано в примере ниже:

'Interface for Display
Public Interface IClientLocationView

    Event LocationChanged(ishomelocation as Boolean)

    Sub DisplayChangesWhenHome(arg1 as Object, arg2 as Object)
    Sub DisplayChangesWhenNotHome(arg1 as Object, arg2 as Object, arg3 as Object)

End Interface


'Controller
Public Class ClientLocationController

    Public Sub Start(_view as IClientLocationView)

        AddHandler _view.LocationChanged, AddressOf LocationChangedHandler

    End Sub

    Public Sub LocationChangedHandler(ishomelocation as Boolean)
        If ishomelocation Then
            _view.DisplayChangesWhenHome(arg1, arg2)
        Else
            _view.DisplayChangesWhenNotHome(arg2, arg1, arg3)
        End If
    End Sub

End Class

Как вызвать событие с логическим параметром, чтобы я мог проверить каждый из путей кода, содержащихся в обработчике события.Мне не повезло с синтаксисом, показанным на главной странице Google Code.

AddHandler foo.SomethingHappened, AddressOf Raise.With(EventArgs.Empty).Now

'If the event is an EventHandler(Of T) you can use the shorter syntax:'

AddHandler foo.SomethingHappened, Raise.With(EventArgs.Empty).Go

Это то, что у меня есть:

<TestMethod()>
  Public Sub VerifyThat_LocationChangedHandler_IsWired()
        Dim _view As IClientLocationView= A.Fake(Of IClientLocationView)()

        Dim pres As ClientLocationController = A.Fake(Of ClientLocationController)(Function() New ClientLocationController(_view))
        pres.Start()

        '??????  Need to raise the event
        'AddHandler _view.LocationChanged, AddressOf Raise.With(EventArgs.Empty).Now


  End Sub

1 Ответ

2 голосов
/ 28 апреля 2011

При использовании версий FakeItEasy старше 2.0.0 события должны быть в форме делегата EventHandler:

Event LocationChanged As EventHandler(Of LocationChangedEventArgs)

Public Class LocationChangedEventArgs
    Inherits EventArgs

    Public Property IsHomeLocation As Boolean
End Class

После того, как это изменилось, теперь вы можете использовать синтаксис события:

AddHandler _view.LocationChanged, Raise.With(New LocationChangedEventArgs With { .IsHomeLocation = True })

Начиная с FakeItEasy 2.0.0 , это ограничение больше не применяется. Вы можете увидеть больше в документации Raising Events , но хитрость заключается в том, чтобы предоставить тип делегата в качестве typeparam для Raise.With.

...