gpt4 book ai didi

unit-testing - 使用 Moq 进行单元测试的模拟 Prism 事件聚合器

转载 作者:行者123 更新时间:2023-12-04 05:16:32 25 4
gpt4 key购买 nike

我需要一些关于如何在单元测试中使用 Moq 的建议,以确保我的被测类按我想要的方式运行。那就是被测类发布了一个事件聚合器(来自 Prism)事件,我需要某种方式来断言该事件已在我的测试中引发。

我在工作中没有很多资源,并且发现很难知道如何设置它。

我有 :-

public SomeEvent : CompositePresentationEvent<SomeEvent>
{
EventPayload
}

public SomeClass
{
void Allocate(){EventAggregator.Publish<SomeEvent>}
}

public SomeService : IService
{
SomeService(){ EventAggregator.Subscribe<SomeEvent>(DoSomething)}
void DoSomething(SomeEvent evt){}
}

我认为如果我的测试是针对 SomeClass 我需要验证是否我调用 SomeClass.Allocate 正在发布 SomeEvent 消息。这是怎么做的?

我是否还需要验证模拟的 SomeService 是否正在接收 SomeEvent?或者这是属于 SomeService 单元测试而不是 SomeClass 的单独单元测试?

无论如何,不​​确定如何设置其中任何一个,因此任何建议将不胜感激。

最佳答案

您将提供 SomeClassIEventAggregator ,这将允许您在测试期间提供模拟:

public SomeClass(IEventAggregator eventAggregator)
{
_eventAggregator = eventAggregator;
}

然后你的测试看起来像这样:
var fakeEventAggregator = new Mock<IEventAggregator>();
var fakeEvent = new Mock<SomeEvent>();

fakeEventAggregator.
Setup(x => x.GetEvent<SomeEvent>()).
Returns(fakeEvent.Object);

var test = new SomeClass(fakeEventAggregator.Object);
test.Allocate();

fakeEvent.Verify(x => x.Publish(It.IsAny<SomeEventArgs>()));

如果这些是单元测试,那么您将在 SomeService 中完全单独测试订阅。测试。您正在测试 SomeClass正确发布事件,并且 SomeService当给它一个要处理的事件时,它的行为是正确的。

关于unit-testing - 使用 Moq 进行单元测试的模拟 Prism 事件聚合器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3381154/

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