Я пытаюсь использовать 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
Как имитировать HttpClient с помощью NSubstitute ⇐ C#
Место общения программистов C#
-
Anonymous
1734205351
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
}
Подробнее здесь: [url]https://stackoverflow.com/questions/68688904/how-to-mock-httpclient-using-nsubstitute[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия