私のテストでは少し苦労しています。ここでMStestのタスク結果はnullです
は私が
public async Task Handle(ReceiveEventsFromSalesForceCommand message, IMessageHandlerContext context)
{
var queryResult = await this.GenerateQueryResultAsync(message).ConfigureAwait(false);
await this.DetermineActionAsync(context, queryResult).ConfigureAwait(false);
}
public async Task<QueryResult<EventStore__c>> GenerateQueryResultAsync(ReceiveEventsFromSalesForceCommand message)
{
QueryResult<EventStore__c> queryResult;
if (string.IsNullOrWhiteSpace(message.NextRecordsUrl))
{
queryResult = await this.forceClient.QueryAsync<EventStore__c>(query).ConfigureAwait(false);
this.log.Info($"AFTER: QueryAllAsync<EventStore>(query), found {queryResult?.TotalSize ?? 0} records");
}
else
{
queryResult = await this.forceClient.QueryContinuationAsync<EventStore__c>(message.NextRecordsUrl).ConfigureAwait(false);
this.log.Info("AFTER: QueryContinuationAsync<EventStore>(query)");
}
return queryResult;
}
をテストしていたコードであり、これは
[TestMethod]
public async Task Test()
{
// arrange
var forceConfig = Substitute.For<ISalesForceCreationHandlerConfig>();
var forceClient = Substitute.For<IForceClient>();
forceClient.QueryAllAsync<EventStore__c>(Arg.Any<string>()).Returns(Task.FromResult(new QueryResult<EventStore__c> { NextRecordsUrl = "Dummy" }));
var messageHandlerContext = Substitute.For<IMessageHandlerContext>();
var handler = new SalesForceBatchCreationHandler(forceClient, null, forceConfig);
// act
await handler.Handle(new ReceiveEventsFromSalesForceCommand(), messageHandlerContext);
// assert
await messageHandlerContext.Received().Send(Arg.Is<ReceiveEventsFromSalesForceCommand>(command => string.IsNullOrWhiteSpace(command.NextRecordsUrl)), Arg.Any<SendOptions>());
await messageHandlerContext.DidNotReceive().SendLocal(Arg.Any<PublishMultipleKlantManagementEnvelopeCreatedEventsCommand>());
}
私の問題は私のGenerateQueryResultAsync
方法のiresultがnull
であると私はとNullReferenceExceptionを得ることである私のユニットテストです。結果がnullでないことを確認して例外を回避するにはどうすればよいですか?
サイドノート:最初のメソッド 'Handle'では、async/awaitを省略すると効率的です。そのメソッドで完了を待つ理由がないので(メソッドに表示されていないものがない限り)、タスクを直接返してください。 – Igor
これは、http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-and-how-do-i-fix-itの複製として閉じられない理由はありますか?あなたが必要とするところで、単にnull以外の値を持つことができないということは、あなたのケースを特別なものにしているのですか? – nvoigt
NS substitute 1.9.0以降を使用していますか?あなたは 'QueryAllAsync'をスタブしているようですが、SUTは' QueryAsync'を呼び出しています。 –