2017-02-09 10 views
1

私は私の非同期メソッドの1つをテストしていますが、それはやや難解です。私のようなので、forceclient非同期呼び出しが受信されなかった

[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); 
} 

公開NSubstituteで検証してみ 私のコードで私は2つのアクションを実行魔女を受けたが、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の呼び出しは受信されませんでしたか?

答えて

2

UpdateAsyncアサートには、Arg.Any<ExpandoObject>()があります。

テスト中のメソッドのEventStore__cExpandoObjectから派生しない限り、アサーションが一致するとは思わない

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

感謝を使用してみてください、それは確かに問題でした –

関連する問題