繁体   English   中英

如何对返回无效值的命令处理程序进行单元测试?

[英]How do I unit test a Command Handler that returns a void?

请参见下面的代码:

public class CreatePersonHandler
        : IRequestHandler<CreatePersonCommand,Unit>
    {

 public async Task<Unit> Handle(CreatePersonCommand message, CancellationToken cancellationToken)
        {
            var person = _enquiryFactory.Create(message.Gender, message.Salary);
            var offers = getAvailableOffers(); 
            person.AssignOffers(offers);
            await _mediator.DispatchDomainEventsAsync(person);
            return Unit.Value;
        }
  }

注意:

1)该命令没有任何状态。
2)命令方法没有返回值。

我在这里已经阅读了一些类似的问题,例如:一个单元测试无效方法? 返回空值的CQRS命令处理程序是否被归类为信息性的,不应进行单元测试?

从根本上说,测试返回一个void的“命令处理程序”与测试返回一个void的方法没有什么不同-void返回清楚地表明该方法因其副作用而被调用,因此您要检查这些副作用。

根据被测对象的性质,使用测试double而不是实时协作者来确定是否发生了正确的事情可能是有意义的。

var person = _enquiryFactory.Create(message.Gender, message.Salary);
var offers = getAvailableOffers(); 
person.AssignOffers(offers);
await _mediator.DispatchDomainEventsAsync(person);
return Unit.Value;

在此示例中要注意的一件事是,不仅您的处理程序中没有状态 ,而且也没有逻辑 -这里的任何分支都封装在协作者中。

假设各个部分组合在一起,那么处理程序的责任就不是很多可能失败的事情。 因此,我不会阻止这样的请求请求,因为处理程序没有“单元测试”。

您能否阐明您的意思是:“假设各部分组合在一起”。 一世

在“强类型”语言中,编译器/解释器将为我们完成大量检查。 如果不满意类型系统,那么在将方法加载到执行环境之前,我们将收到一条错误消息。

我看到您正在使用.DispatchDomainEventsAsync()添加/引发新事件。 您可以返回这些事件并编写一个简单的单元测试来计算这些事件的数量或结构,而不是什么也不返回。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM