测试事件聚合器的订阅
本文关键字:事件 测试 | 更新日期: 2023-09-27 18:30:46
多亏了
这个答案,我设法测试了PRISM EventAggregator的发布事件(用FakeItEasy伪造)
[TestCase]
public void test_that_publish_occured()
{
var fakeEventAg = A.Fake<IEventAggregator>();
var fakeEvent = A.Fake<MyEvent>();
A.CallTo(() => fakeEventAg.GetEvent<MyEvent>())
.Returns(fakeEvent);
MyViewModel mvm = new MyViewModel(fakeEventAg);
mvm.ICommandThatCausesPublishToBeCalled.Execute();
A.CallTo(() => fakeEvent.Publish(A<SomeClass>.Ignored))
.MustHaveHappened();
}
但是我未能测试订阅此事件。我尝试了以下方法,但出现异常"无法拦截非虚拟方法"。
[TestCase]
public void test_that_event_is_listened()
{
var fakeEventAg = A.Fake<IEventAggregator>();
var fakeEvent = A.Fake<MyEvent>();
A.CallTo(() => fakeEventAg.GetEvent<MyEvent>())
.Returns(fakeEvent);
// subscription occurs in the constructor
MyViewModel2 mvm2 = new MyViewModel2(fakeEventAg);
A.CallTo(() => fakeEventAg.GetEvent<MyEvent>()
.Subscribe(A<Action<PayloadClass>>.Ignored))
.MustHaveHappened();
}
如何测试事件是否已订阅?它不一定是单元测试,但也可以是集成测试。
发生错误是因为 Subscribe
方法不是虚拟的,因此无法模拟。我看到EventBase
类(MyEvent
基于该类)具有Subscriptions
属性。您应该能够检查该集合以验证是否已添加事件。