我正在使用 MassTransit 8 和 AddMassTransitTestHarness 方法来连接一些测试。我有一个 IConsumer,在 Consume 方法中,我故意抛出一个新的异常,只是为了测试失败情况以及我是否可以在测试中检测到消息未成功消费。
在测试中我做了以下所有操作,但它们都成功通过了,这是出乎意料的:
Assert.That(await harness.Published.Any<MyMessage>(x => x.Context.Message.SiteId == siteId));
Assert.That(await harness.Consumed.Any<MyMessage>(x => x.Context.Message.SiteId == siteId));
var consumerHarness = harness.GetConsumerHarness<MyMessage>();
Assert.That(await consumerHarness.Consumed.Any<MyMessage>(x => x.Context.Message.SiteId == siteId));
Assert.False(await consumerHarness.Consumed.Any<Fault>());
Assert.False(await harness.Consumed.Any<Fault>());
我的期望是 .Consumed.Any 断言会失败,因为消息未成功使用,或者 .Consumed.Any 会失败(为真),因为存在错误。
任何人都可以帮我指出正确的方向吗?
谢谢
要断言消息已被使用而不抛出异常,您可以在断言上指定过滤器表达式:
Assert.That(await consumerHarness.Consumed
.Any<MyMessage>(x => x.Context.Message.SiteId == siteId
&& x.Exception is null));
使用逆函数查找引发异常的消息。
Assert.That(await consumerHarness.Consumed
.Any<MyMessage>(x => x.Context.Message.SiteId == siteId
&& x.Exception != null));