加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

单元测试 – 使用Moq模拟Prism事件聚合器进行单元测试

发布时间:2020-12-14 04:58:12 所属栏目:百科 来源:网络整理
导读:我需要一些关于如何在单元测试中使用Moq的建议,以确保我所测试的课程表现得如何.那就是被测试的类发布了一个Event Aggregator(来自Prism)事件,我需要一些方法断言在我的测试中引发了这个事件. 我没有很多工作资源,我发现很难知道如何设置它. 我有 :- public
我需要一些关于如何在单元测试中使用Moq的建议,以确保我所测试的课程表现得如何.那就是被测试的类发布了一个Event Aggregator(来自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?

无论如何,不??知道如何设置任何这样的任何建议将不胜感激.

解决方法

您将为SomeClass提供一个IEventAggregator,它允许您在测试期间提供模拟:

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的行为正确.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读