Ram*_*ngh 25 c# unit-testing azure azure-functions visual-studio-2017
我的Azure功能代码如下所示
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");
}
}
}
Run Code Online (Sandbox Code Playgroud)
在我的测试项目中,我正在阅读如下结果:
var result = await MyHttpTriggerFunction.Run(req, log).ConfigureAwait(false);
Run Code Online (Sandbox Code Playgroud)
执行该函数后,当它尝试在结果变量中返回响应时,测试方法失败并出现异常.
**
System.InvalidOperationException:请求没有关联的配置对象,或者提供的配置为null.
**
我确保测试项目具有相同的System.Net.Http.HttpRequestMessageExtensiondll.
如果我更改功能代码不使用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;
}
Run Code Online (Sandbox Code Playgroud)
下面是错误的堆栈跟踪
结果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()---从抛出异常的先前位置的堆栈跟踪结束---在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行---从抛出异常的上一个位置的堆栈跟踪结束---在System.Runtime.CompilerSe Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices.ThreadOperations.ExecuteWithAbortSafety(Action action)中的System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)中的rvices.TaskAwaiter.ThrowForNonSuccess(任务任务)结果消息:测试方法MyFunctionAppUnitTest.MyHttpTriggerFunctionTest. MyHttpTriggerFunction_SuccessResult引发异常:System.InvalidOperationException:请求没有关联的配置对象,或者提供的配置为null.
我错过了一些微不足道的东西
Nko*_*osi 41
错误消息告诉您问题.
请求没有关联的配置对象,或者提供的配置为null.
在测试http服务器的请求时,您需要提供请求a HttpConfiguration.
// Arrange.
var configuration = new HttpConfiguration();
var request = new System.Net.Http.HttpRequestMessage();
request.Properties[System.Web.Http.Hosting.HttpPropertyKeys.HttpConfigurationKey] = configuration;
//...other code
Run Code Online (Sandbox Code Playgroud)
Fab*_*nte 15
这是不特定于Azure的功能,但为了实际的HTTP请求的上下文之外执行这个测试,你需要确保你创建一个HttpConfiguartion实例,将其配置为需要(如增加可能需要的任何格式化),并呼吁SetConfiguration对HttpRequestMessage具有该对象的实例.
例:
var configuration = new HttpConfiguration();
var request = new HttpRequestMessage();
request.SetConfiguration(configuration);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7475 次 |
| 最近记录: |