从未收到 forceclient 异步调用

forceclient async call never received

我正在对我的一种异步方法进行单元测试,但事实证明它有点棘手。 在我的代码中,我执行了两个操作 我尝试像这样使用 NSubstitute 进行验证

[TestMethod]
public async Task GivenDebatchingHandler_WhenCommandReceived_EventIsPublishedAndStatusUpdated()
{
    // arrange
    var forceClient = Substitute.For<IForceClient>();
    forceClient.UpdateAsync(EntityNames.EventStore, Arg.Any<string>(), Arg.Any<ExpandoObject>()).Returns(info => Task.FromResult(new SuccessResponse { Success = true }));
    var messageHandlerContext = Substitute.For<IMessageHandlerContext>();
    var handler = new DebatchingHandler(forceClient);
    var @event = new KlantManagementEnvelopeCreatedEvent { Header = new Header { MessageId = "UnitTest" } };
    var cmd = new PublishMultipleKlantManagementEnvelopeCreatedEventsCommand { EventsLargePayload = new List<KlantManagementEnvelopeCreatedEvent>(new[] { @event }) };

    // act
    await handler.Handle(cmd, messageHandlerContext).ConfigureAwait(false);

    // assert
    await messageHandlerContext.Received().Publish(@event, Arg.Any<PublishOptions>()).ConfigureAwait(false);
    await forceClient.Received().UpdateAsync(EntityNames.EventStore, "UnitTest", Arg.Any<ExpandoObject>()).ConfigureAwait(false);
}

已收到发布,但未收到 UpdateAsync。这是被测代码:

public async Task Handle(PublishMultipleKlantManagementEnvelopeCreatedEventsCommand message, IMessageHandlerContext context)
{        
    await Task.WhenAll(message.EventsLargePayload.Select(@event => this.ProcessEvent(@event, context))).ConfigureAwait(false);
}

public async Task ProcessEvent(KlantManagementEnvelopeCreatedEvent envelopeCreatedEvent, IMessageHandlerContext context)
{
    await context.Publish(envelopeCreatedEvent).ConfigureAwait(false);

    var eventStoreRecord = new EventStore__c { Status__c = EventStoreStatus.Published.ToName() };
    await this.forceClient.UpdateAsync(EntityNames.EventStore, envelopeCreatedEvent.Header.MessageId, eventStoreRecord).ConfigureAwait(false);        
}

为什么 UpdateAsync 电话从未接到?

测试在 UpdateAsync 断言中有 Arg.Any<ExpandoObject>()

除非被测方法中的 EventStore__c 派生自 ExpandoObject,否则我认为该断言不匹配。

尝试使用

await forceClient.Received()
      .UpdateAsync(EntityNames.EventStore, "UnitTest", Arg.Any<EventStore__c>())
      .ConfigureAwait(false);