【发布时间】:2016-09-30 18:31:01
【问题描述】:
我有这段代码,无论如何我都无法让 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 并得到相同的结果。
【问题讨论】:
-
您使用的是哪个版本的 nsubstitute? (我现在正在尝试重现该问题。)
-
我在 .Net Core 中使用 2.0.0-rc,但在普通控制台应用程序上尝试使用 1.10.0 的代码并得到相同的结果。
-
嗯。复制了它,但还没有设法修复它......
-
我认为我用 NSubstitute 做了一些明显愚蠢的事情,因为这是我第一次使用它。
-
我怀疑这是问题所在:“警告:替换类可能会产生一些令人讨厌的副作用。对于初学者来说,NSubstitute 只能与类的虚拟成员一起使用,因此任何非虚拟代码在课程将真正执行!”
PostAsync不是虚方法...
标签: c# .net mocking httpclient nsubstitute