У меня есть этот код, и я не могу заставить HTTPClient возвращать ответ строки, несмотря ни на что.Аргумент соответствия не работает должным образом с NSubstitute
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
, но это тоже не работает.
Я использую NSubstitute 2.0.0-rc
на .NET Core, но я также попытался использовать NSubstitute 1.10.0
в стандартном приложении консоли и получил тот же результат.
Какую версию nsubstitute вы используете? (Я пытаюсь воспроизвести проблему сейчас.) –
Я использую 2.0.0-rc с .Net Core, но пробовал этот код с 1.10.0 в обычном консольном приложении и получил тот же результат. –
Хм. Воспроизвел его, но еще не удалось его исправить ... –