Как имитировать HttpClient с помощью NSubstituteC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как имитировать HttpClient с помощью NSubstitute

Сообщение Anonymous »

Я пытаюсь использовать NSubstitute для имитации HttpClient. Вот код:
public static HttpClient GetHttpClient(bool isSucess = true, string methodType = "GET")
{
var mockIHttpMessageHandler = Substitute.For();
var mockHttpMessageHandler = Substitute.For(mockIHttpMessageHandler);
var httpResponse = Substitute.For();
httpResponse.Content = new StringContent("\"test\"");
if (isSucess)
httpResponse.StatusCode = HttpStatusCode.OK;
else
httpResponse.StatusCode = HttpStatusCode.NotFound;

var mockHttpClient = Substitute.For(mockHttpMessageHandler);
mockHttpClient.BaseAddress = new Uri("http://localhost");

if(methodType != "POST"){
mockHttpClient.GetAsync(Arg.Any()).ReturnsForAnyArgs(httpResponse);
}
return mockHttpClient;
}

Однако в этой строке возникла ошибка:
mockHttpClient.GetAsync(Arg.Any()).ReturnsForAnyArgs(httpResponse);

И ошибка:

NSubstitute.Exceptions.RedundantArgumentMatcherException: 'Некоторые
спецификации аргументов (например, Arg .Is, Arg.Any) остались после
последнего вызова.
Это часто происходит из-за использования спецификации аргумента с вызовом члена
NSubstitute не обрабатывает (например, невиртуальный член или вызов
экземпляра, который не является заменой) или для других целей, кроме
определения вызова (например, использование аргумента spec в качестве возвращаемого значения). Для
примера:
var sub = Substitute.For();
var realType = new MyRealType(sub);
// INCORRECT, arg spec used on realType, not a substitute:
realType.SomeMethod(Arg.Any()).Returns(2);
// INCORRECT, arg spec used as a return value, not to specify a call:
sub.VirtualMethod(2).Returns(Arg.Any());
// INCORRECT, arg spec used with a non-virtual method:
sub.NonVirtualMethod(Arg.Any()).Returns(2);
// CORRECT, arg spec used to specify virtual call on a substitute:
sub.VirtualMethod(Arg.Any()).Returns(2);

Чтобы это исправить, убедитесь, что вы используете спецификации аргументов только с вызовами
подстановок. Если вашей заменой является класс, убедитесь, что этот член является
виртуальным.
Другая возможная причина заключается в том, что тип спецификации аргумента не соответствует
фактическому типу аргумента, но код компилируется из-за неявного приведения.
Например, использовался Arg.Any(), но
требовался Arg.Any().
ПРИМЕЧАНИЕ: причина этого исключения может быть в ранее выполнил
тест. Используйте диагностику ниже, чтобы увидеть типы любых избыточных спецификаций аргументов, а затем выяснить, где они создаются.
Диагностическая информация:
Спецификации остальных (несвязанных) аргументов:
любой Uri
Спецификации всех аргументов:
любой Uri

Они предполагают, что мне нужно изменить метод getAsync? Для GetAsync нет виртуального метода.
Изменить:
Я также пытался удалить NSubstitute для HttpClient следующим образом, но все равно получил та же ошибка:
public static HttpClient GetHttpClient(bool isSucess = true, string methodType = "GET")
{
var mockIHttpMessageHandler = Substitute.For();
var mockHttpMessageHandler = Substitute.For(mockIHttpMessageHandler);
var httpResponse = Substitute.For();
httpResponse.Content = new StringContent("\"test\"");
if (isSucess)
httpResponse.StatusCode = HttpStatusCode.OK;
else
httpResponse.StatusCode = HttpStatusCode.NotFound;

var httpClient = new HttpClient(mockHttpMessageHandler);
httpClient = new Uri("http://localhost");

if(methodType != "POST"){
httpClient .GetAsync(Arg.Any()).ReturnsForAnyArgs(httpResponse);
}
return httpClient
}


Подробнее здесь: https://stackoverflow.com/questions/686 ... substitute
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как имитировать возвращаемое значение индексатора с помощью любого строкового ключа в NSubstitute?
    Anonymous » » в форуме C#
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • Как имитировать возвращаемое значение индексатора с помощью любого строкового ключа в NSubstitute?
    Anonymous » » в форуме C#
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • Как имитировать/имитировать события очереди Laravel в тестах?
    Anonymous » » в форуме Php
    0 Ответы
    34 Просмотры
    Последнее сообщение Anonymous
  • Как имитировать/имитировать события очереди Laravel в тестах?
    Anonymous » » в форуме Php
    0 Ответы
    34 Просмотры
    Последнее сообщение Anonymous
  • Как имитировать/имитировать события очереди Laravel в тестах?
    Anonymous » » в форуме Php
    0 Ответы
    41 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»