Когда вы использовали NSubstitute, вы должны были указать фиктивное представление, чтобы вызвать событие. Но поскольку интерфейс IView не позволяет вам инициировать событие, только добавить прослушиватель событий, NSubstitute делает обходной путь, подключая специальный обработчик событий, на самом деле запускает событие (я не знаком с NSubstitute, но я предполагаю, что это то, что происходит):
// Code here says "attact an event handler", but NSubstitute recognizes this
// special event handler and raises the event to the "real" hanlders instead
mockView.Loaded += Raise.Event<Action>();
Таким образом, когда вы уходите от NSubstitute, вам нужно вызвать событие «правильным» способом из класса поддельного представления:
public class FakeView : IView
{
private string RenderedText { get; private set; }
public event Action Loaded;
public void Render(string text)
{
renderedText = text;
}
public void RaiseLoaded() {
if (Loaded != null) Loaded();
}
}
Теперь вы можете легко запускать события из своего теста:
[Test]
public void ctor_WhenViewIsLoaded_CallsViewRender_WithoutMockingFramework()
{
FakeView view = new FakeView();
Presenter p = new Presenter(fPresenter);
view.RaiseLoaded();
Assert.That(view.RenderedText, Is.EqualTo("Hello World"));
}