我有这段代码,无论如何都无法让httpClient返回字符串响应。
HttpClient httpClient = Substitute.For<HttpClient>();
httpClient.PostAsync("/login", Arg.Any<StringContent>())
.Returns(this.StringResponse("{\"token\": \"token_content\"}"));
Console.WriteLine(await httpClient.PostAsync("/login", new StringContent(string.Empty)) == null); // True
如果有人想复现这个过程,这里是StringResponse
方法:
private HttpResponseMessage StringResponse(string content)
{
var response = new HttpResponseMessage(HttpStatusCode.OK);
if (content != null)
{
response.Content = new StringContent(content);
}
return response;
}
我做错了什么?
当我这样做时,它可以正常工作
httpClient.PostAsync("/login", Arg.Any<StringContent>())
.ReturnsForAnyArgs(this.StringResponse("{\"token\": \"token_content\"}"));
但我不仅需要任何参数,我需要其中一个是字符串"/login"
,另一个是StringContent
类型。
我试图在Arg.Is
调用中放入更通用的内容,如HttpContent
,但那也不起作用。
我正在使用.NET Core
上的NSubstitute 2.0.0-rc
,但我也尝试在标准控制台应用程序上使用NSubstitute 1.10.0
,并得到了相同的结果。
PostAsync
不是一个虚方法... - Jon Skeetpublic Task<HttpResponseMessage> PostAsync(string requestUri, HttpContent content)
。 - Fabio