我尝试使用以下功能进行单元测试https://fluentassertions.com/eventmonitoring/
但是我在执行行发现了一个奇怪的异常。
Message:
System.InvalidProgramException : Common Language Runtime detected an invalid program.
Stack Trace:
Func`2DynamicHandler(EventRecorder , InternalOrder )
EventExtensions.Raise[T](Func`2 handlers, T arg) line 42
InternalOrderProcessor.CreateInternalOrder(SkuDemand skuDemand, PickLevelDestinationStateInfo pickLevelDestinationStateInfo) line 199
InternalOrderProcessor.CreateInternalOrders(IList`1 skuDemands, PickLevelDestinationStateInfo pickLevelDestinationStateInfo) line 86
InternalOrderProcessorTests.CreateInternalOrder_MultiDemandCoveredWithOneSku_OrderForOneSkuCreatedAndSent()
GenericAdapter`1.GetResult()
AsyncToSyncAdapter.Await(Func`1 invoke)
TestMethodCommand.RunTestMethod(TestExecutionContext context)
TestMethodCommand.Execute(TestExecutionContext context)
<>c__DisplayClass1_0.<Execute>b__0()
DelegatingTestCommand.RunTestMethodInThreadAbortSafeZone(TestExecutionContext context, Action action)
这是我的测试代码
var monitor = this.service.Monitor();
await this.service.CreateOrder(); // exception here
monitor.Should().Raise(nameof(this.service.OrderCreated));
此外,如果我使用我的解决方案检查事件引发-一切工作
var isRaised = false;
this.service.OrderCreated += order =>
{
isRaised = true;
return Task.CompletedTask;
};
await this.service.CreateOrder(); // without exception
isRaised.Should().BeTrue();
我也遇到过同样的问题。在我的研究之后,我假设你正在为。net标准2.0中包含的。net版本构建,如。net 6.0或7.0。
在fluentassertions文档的底部,它概述了。net标准2.0不支持,因为有一个特定的反射方法缺失。因此,目前似乎没有比您已经实现的捕获引发事件的方法更好的解决方案了。
问好