gpt4 book ai didi

c# - 如何在 UIThread 上测试 Prism 事件聚合器订阅?

转载 作者:行者123 更新时间:2023-12-03 21:06:57 25 4
gpt4 key购买 nike

我有一个类,它通过 PRISMs 事件聚合器订阅一个事件。

因为模拟事件聚合器有点困难,如 here 所述。 ,我只是实例化一个真实的并将其传递给被测系统。

然后在我的测试中,我通过该聚合器发布事件,然后检查我的被测系统如何对其使用react。由于该事件将在生产期间由 FileSystemWatcher 引发,因此我想通过订阅 UIThread 来利用自动调度,因此一旦引发事件,我就可以更新我的 UI。

问题是,在测试期间,除非我不在 UIThread 上订阅,否则事件在被测系统中永远不会被注意到。

我正在使用 MSpec 进行测试,我通过 TDD.Net 从 VS2008 内部运行。
添加 [RequiresSta]对我的测试课没有帮助

有没有人有一个解决方案,可以避免我在测试期间更改 ThreadOption(例如,通过属性 - 多么丑陋的黑客)???

最佳答案

如果你同时模拟事件和事件聚合器,并使用 moq 的回调,你可以做到。

这是一个例子:

Mock<IEventAggregator> mockEventAggregator;
Mock<MyEvent> mockEvent;

mockEventAggregator.Setup(e => e.GetEvent<MyEvent>()).Returns(mockEvent.Object);

// Get a copy of the callback so we can "Publish" the data
Action<MyEventArgs> callback = null;

mockEvent.Setup(
p =>
p.Subscribe(
It.IsAny<Action<MyEventArgs>>(),
It.IsAny<ThreadOption>(),
It.IsAny<bool>(),
It.IsAny<Predicate<MyEventArgs>>()))
.Callback<Action<MyEventArgs>, ThreadOption, bool, Predicate<MyEventArgs>>(
(e, t, b, a) => callback = e);


// Do what you need to do to get it to subscribe

// Callback should now contain the callback to your event handler
// Which will allow you to invoke the callback on the test's thread
// instead of the UI thread
callback.Invoke(new MyEventArgs(someObject));

// Assert

关于c# - 如何在 UIThread 上测试 Prism 事件聚合器订阅?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2375178/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com