执行测试时出错,如果使用CreateResponse扩展方法返回Azure Function HttpResonseMessage
我的Azurefunction代码如下所示
public static class MyHttpTriggerFunction { public static async Task 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);
执行该函数后,当它尝试在结果变量中返回响应时,测试方法失败并出现exception。
**
System.InvalidOperationException:请求没有关联的配置对象,或者提供的配置为null。
**
我确保测试项目具有相同的System.Net.Http.HttpRequestMessageExtension
dll。
如果我更改function代码不使用CreateResponse
扩展方法(此扩展方法来自VS 2017模板的代码)并返回如下所示的响应,我在测试方法中得到响应,测试用例运行正常。
var res = new HttpResponseMessage(); if (valid) { res.StatusCode = HttpStatusCode.OK; res.Content = new ObjectContent(true, new JsonMediaTypeFormatter()); return res; } else { res.StatusCode = HttpStatusCode.BadRequest; res.Content = new ObjectContent("some error message", new JsonMediaTypeFormatter()); return res; }
下面是错误的堆栈跟踪
结果StackTrace:System.Net.Http.HttpRequestMessageExtensions.CreateResponse [T](HttpRequestMessage请求,HttpStatusCode statusCode,T值,HttpConfiguration配置)在System.Net.Http.HttpRequestMessageExtensions.CreateResponse [T](HttpRequestMessage请求,HttpStatusCode statusCode,T)在MyFunctionApp.MyHttpTriggerFunction.d__1.MoveNext()—从抛出exception的先前位置的堆栈跟踪结束—在System.Runtime.CompilerServices上的System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)处。位于C:\ Users \ rsingh \ Desktop \ Git_Workspace \ ActivationAPI \ MyFunctionAppUnitTest \ MyHttpTriggerFunctionTest中的MyFunctionAppUnitTest.MyHttpTriggerFunctionTest.d__2.MoveNext()中的System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.GetResult()中的TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务) .cs:第53行—从抛出exception的上一个位置的堆栈跟踪结束—在System.Runtime.CompilerSe Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices.ThreadOperations.ExecuteWithAbortSafety(Action action)中的System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)中的rvices.TaskAwaiter.ThrowForNonSuccess(任务任务)结果消息:测试方法MyFunctionAppUnitTest.MyHttpTriggerFunctionTest。 MyHttpTriggerFunction_SuccessResult引发exception:System.InvalidOperationException:请求没有关联的配置对象,或者提供的配置为null。
我错过了一些微不足道的东西
错误消息告诉您问题。
请求没有关联的配置对象,或者提供的配置为null。
在测试HttpConfiguration.
的请求时,您需要为请求提供HttpConfiguration.
// Arrange. var configuration = new HttpConfiguration(); var request = new System.Net.Http.HttpRequestMessage(); request.Properties[System.Web.Http.Hosting.HttpPropertyKeys.HttpConfigurationKey] = configuration; //...other code
这不是特定于Azurefunction,但为了在实际HTTP请求的上下文之外执行此测试,您需要确保创建HttpConfiguartion
实例,根据需要配置它(例如添加您可能需要的任何格式化程序)并调用使用该对象的HttpRequestMessage
实例上的SetConfiguration
。
例:
var configuration = new HttpConfiguration(); var request = new HttpRequestMessage(); request.SetConfiguration(configuration);
- Azurefunction角色,如停止Azure虚拟机的权限
- 强制EventProcessorHost将失败的Azure Event Hub eventData重新传递给IEventProcessor.ProcessEvents方法
- 使用RequireHttpsAttribute ASP.NET Core的HTTP错误310 ERR_TOO_MANY_REDIRECTS
- 是否可以在一个ASP.NET MVC应用程序中同时具有Azure AD和个人帐户身份validation?
- 如何将Stream上载到Azure Media Services
- 无法加载文件或程序集’System.Runtime.InteropServices.RuntimeInformation
- DocumentDB TransientFaultHandling最佳实践
- 多语言网站:Azure部署的行为与localhost不同
- 如何通过AADvalidationAzure服务管理请求