![](/img/trans.png)
[英]How to mock the CreateResponse<T> extension method on HttpRequestMessage
[英]How can I mock HttpRequestMessage, specifically the CreateResponse?
我如何模擬HttpRequestMessage
,特別是CreateResponse
?
var requestMessage = Substitute.For<HttpRequestMessage>();
requestMessage.CreateResponse().ReturnsForAnyArgs(
new HttpResponseMessage(HttpStatusCode.OK));
但我得到例外......
NSubstitute.Exceptions.CouldNotSetReturnDueToNoLastCallException:
'Could not find a call to return from.
我已經看到了這些問題...... 如何在HttpRequestMessage上模擬CreateResponse <T>擴展方法
並關聯... 使用Request.CreateResponse的ASP.NET WebApi單元測試 ...
但他們似乎並沒有真正嘲笑CreateResponse
附加評論:
我正在嘗試圍繞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");
}
和實際測試,我想模擬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");
}
這里不需要嘲笑任何東西。 對於此測試,一切都可以安全存根。 CreateResponse
是一種擴展方法,在內部使用請求的關聯HttpConfiguration
。 這是在測試中使用它之前需要設置的唯一要求。
有了這個,如果您按如下方式更新測試,您應該能夠正確地進行測試。
[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.