测试 nservicebus saga 的更好方法

Better way to test nservicebus saga

我正在尝试对 nservice saga 进行单元测试并编写了一个测试。

在该测试中有一个断言语句如下

Assert.IsType<MyCommand>(_messageContext.SentMessages[2].Message);

你可以看到我必须使用索引 2 才能做到这一点。在我的故事中,我发送了很多消息,因此使用 Index 进行测试有点困难。我尝试 google 但找不到更好的解决方案。

有没有像_messageContext.SentMessages("MyCommand").Message这样的方法?

如果您不关心消息发送的确切顺序,您可以使用 Linq OfType 方法 as documented here 来查找相关类型的消息:

var myCommandMessage = _messageContext.SentMessages.OfType<MyCommand>().Single();

这听起来更像是优雅地编写断言的问题,而不是特定于 NServiceBus 的问题。一种更容易编写断言的方法是使用诸如 FluentAssertions 之类的库,它具有非常易读的语法来断言,例如特定类型的集合中恰好有一条消息,检查消息内容是否正确