简体   繁体   English

我如何模拟HttpRequestMessage,特别是CreateResponse?

[英]How can I mock HttpRequestMessage, specifically the CreateResponse?

How can I mock HttpRequestMessage , specifically the CreateResponse ? 我如何模拟HttpRequestMessage ,特别是CreateResponse

var requestMessage = Substitute.For<HttpRequestMessage>();
requestMessage.CreateResponse().ReturnsForAnyArgs(
       new HttpResponseMessage(HttpStatusCode.OK));

but I get the exception ... 但我得到例外......

NSubstitute.Exceptions.CouldNotSetReturnDueToNoLastCallException: 
  'Could not find a call to return from.

I've seen the questions ... How to mock the CreateResponse<T> extension method on HttpRequestMessage 我已经看到了这些问题...... 如何在HttpRequestMessage上模拟CreateResponse <T>扩展方法

And associated ... ASP.NET WebApi unit testing with Request.CreateResponse ... 并关联... 使用Request.CreateResponse的ASP.NET WebApi单元测试 ...

But they don't seem to actually end up mocking the CreateResponse 但他们似乎并没有真正嘲笑CreateResponse

Additional comments: 附加评论:

I'm trying to write a unit test around the starter of an Azure precompiled C# function ... 我正在尝试围绕Azure预编译C#函数的启动程序编写单元测试...

[FunctionName("Version")]
public static HttpResponseMessage Run(
    [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)]
    HttpRequestMessage req,
    TraceWriter log)
{
    log.Info("Version function processed a request ... ");

    return req.CreateResponse(HttpStatusCode.OK, "Version 0.0.1");
}

and the actual test, where I want to mock up the HttpRequestMessage, specifically the CreateReponse where I get the error is ... 和实际测试,我想模拟HttpRequestMessage,特别是我得到错误的CreateReponse是...

[TestMethod]
public void Version_returns_value()
{
    var requestMessage = Substitute.For<HttpRequestMessage>();
    requestMessage.CreateResponse(Arg.Any<HttpStatusCode>(), Arg.Any<string>())
                  .Returns(new HttpResponseMessage(HttpStatusCode.OK));
    var log = new CustomTraceWriter(TraceLevel.Verbose);

    var httpResponseMessage = VersionFunction.Run(requestMessage, log);
    var httpContent = httpResponseMessage.Content;

    httpContent.Should().Be("Version 0.0.1 :: valid");
}

No need to mock anything here. 这里不需要嘲笑任何东西。 Everything can be stubbed safely for this test. 对于此测试,一切都可以安全存根。 CreateResponse is an extension method that, internally, makes use of the request's associated HttpConfiguration . CreateResponse是一种扩展方法,在内部使用请求的关联HttpConfiguration That is the only requirements that needs to be setup before using it in your test. 这是在测试中使用它之前需要设置的唯一要求。

With that, if you update your test as follows, you should be able to properly exercise your test. 有了这个,如果您按如下方式更新测试,您应该能够正确地进行测试。

[TestMethod]
public async Task Version_returns_value() {
    var expected = "\"Version 0.0.1\"";
    var config = new HttpConfiguration();
    var requestMessage = new HttpRequestMessage();
    requestMessage.SetConfiguration(config);

    var log = new CustomTraceWriter(TraceLevel.Verbose);

    var httpResponseMessage = VersionFunction.Run(requestMessage, null);
    var httpContent = httpResponseMessage.Content;
    var content = await httpContent.ReadAsStringAsync();

    content.Should().Be(expected);
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何在HttpRequestMessage上模拟CreateResponse <T>扩展方法 - How to mock the CreateResponse<T> extension method on HttpRequestMessage 我如何使用HttpRequestMessage.CreateResponse <HttpError> ()在ASP.NET 5中 - How can I use HttpRequestMessage.CreateResponse<HttpError>() in ASP.NET 5 如何使用 Moq 模拟 HttpRequestMessage - How to mock HttpRequestMessage with Moq HttpRequestMessage.CreateResponse 抛出 StackOverflowException - HttpRequestMessage.CreateResponse threw StackOverflowException 如何在.NET Core中模拟/存根HttpRequestMessage? - How do I mock/stub HttpRequestMessage in .NET Core? 如何将HttpRequestMessage保存到文件? - How can I save an HttpRequestMessage to file? Azure函数:HttpRequestMessage不包含“ CreateResponse”的定义 - Azure Functions : HttpRequestMessage does not contain a definition for 'CreateResponse' 如何使用HTTPRequestMessage添加SOAP身份验证标头? - How can I add a SOAP authentication header with HTTPRequestMessage? 如何在HttpRequestMessage中包含If-None-Match标头 - How can I include If-None-Match header in HttpRequestMessage 从Web Api HttpRequestMessage.CreateResponse返回自定义XML - Return custom XML from Web Api HttpRequestMessage.CreateResponse
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM