私のAzure Functionコードは以下のようです
public static class MyHttpTriggerFunction
{
public static async Task<HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)]HttpRequestMessage req, TraceWriter log)
{
// some business logic
if (valid)
{
return req.CreateResponse(HttpStatusCode.OK, true);
}
else
{
return req.CreateResponse(HttpStatusCode.BadRequest, "some error message");
}
}
}
私のテストプロジェクトでは、以下のような結果を読んでいます。
var result = await MyHttpTriggerFunction.Run(req, log).ConfigureAwait(false);
関数を実行した後、結果変数に応答を返そうとすると、テストメソッドは例外で失敗します。
**
System.InvalidOperationException:要求に関連付けられた構成オブジェクトがないか、指定された構成がnullでした。
**
テストプロジェクトに同じSystem.Net.Http.HttpRequestMessageExtension
dll。
CreateResponse
拡張メソッドを使用しないように関数コードを変更し(この拡張メソッドはVS 2017テンプレートのコードからのものです)、以下のような応答を返すと、テストメソッドで応答が返され、テストケースが正常に実行されます。
var res = new HttpResponseMessage();
if (valid)
{
res.StatusCode = HttpStatusCode.OK;
res.Content = new ObjectContent<bool>(true, new JsonMediaTypeFormatter());
return res;
}
else
{
res.StatusCode = HttpStatusCode.BadRequest;
res.Content = new ObjectContent<string>("some error message", new JsonMediaTypeFormatter());
return res;
}
以下はエラーのスタックトレースです
結果StackTrace:System.Net.Http.HttpRequestMessageExtensions.CreateResponse [T](HttpRequestMessage request、HttpStatusCode statusCode、T value、HttpConfiguration configuration)at System.Net.Http.HttpRequestMessageExtensions.CreateResponse [T](HttpRequestMessage request、HttpStatusCode statusCode、T value)at MyFunctionApp.MyHttpTriggerFunction.d__1.MoveNext()---例外がスローされた前の場所からのスタックトレースの終わり--- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)at System.Runtime.CompilerServices。 TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.GetResult()at MyFunctionAppUnitTest.MyHttpTriggerFunctionTest.d__2.MoveNext()in C:\ Users\rsingUnit\Desktop\FunctionRiveUnitMyMyAPI_Test_MyMyAPI_Test_MyMyTestService_Git_Workspace_Git_Workspace .cs:line 53 ---例外がスローされた前の場所からのスタックトレースの終わり--- at System.Runtime.CompilerSe System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)でのMicrosoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices.ThreadOperations.ExecuteWithAbortSafety(Action action)MyTrigAppUnitTestTestTest関数のテストメッセージテスト関数のテストメッセージ:テストメッセージテスト関数のテスト:テストメッセージのテスト結果のテストMyHttpTriggerFunction_SuccessResultが例外をスローしました:System.InvalidOperationException:リクエストに関連付けられた構成オブジェクトがないか、提供された構成がnullでした。
些細なことを逃していますか
エラーメッセージが問題を通知しています。
リクエストに関連付けられたconfigurationオブジェクトがないか、提供された設定がnullでした。
Httpserverの外側でリクエストをテストするときは、リクエストにHttpConfiguration.
// Arrange.
var configuration = new HttpConfiguration();
var request = new System.Net.Http.HttpRequestMessage();
request.Properties[System.Web.Http.Hosting.HttpPropertyKeys.HttpConfigurationKey] = configuration;
//...other code
これはAzure Functionsに固有のものではありませんが、実際のHTTPリクエストのコンテキスト外でこのテストを実行するには、HttpConfiguartion
インスタンスを作成し、必要に応じて構成する必要があります(例:フォーマッターを追加します)必要な場合があります)、そのオブジェクトを使用してSetConfiguration
インスタンスでHttpRequestMessage
を呼び出します。
例:
var configuration = new HttpConfiguration();
var request = new HttpRequestMessage();
request.SetConfiguration(configuration);