В настоящее время я занимаюсь обновлением простого проекта до ядра dotnet 3. В этом проекте есть ряд модульных тестов, большинство из которых относится к уровню контроллера/API с использованием AutoFixture и xunit2.
После обновления все работает, ЗА ИСКЛЮЧЕНИЕМ модульных тестов автофиксации, которые пытаются создать контроллер. Они терпят неудачу со следующим исключением:
AutoFixture.ObjectCreationExceptionWithPath: AutoFixture не удалось создать экземпляр из Microsoft.AspNetCore.Mvc.ModelBinding.BindingInfo, поскольку создание неожиданно завершилось ошибкой с исключением. Обратитесь к внутреннему исключению, чтобы выяснить основную причину сбоя.
Путь запроса:
*.Inventory.Api.Controllers.ProductCategoriesController контроллер* .Inventory.Api.Controllers.ProductCategoriesController
Microsoft.AspNetCore.Mvc.ControllerContext
Microsoft.AspNetCore.Mvc.ControllerContext
Microsoft.AspNetCore.Mvc.Controllers.ControllerActionDescriptor
Microsoft.AspNetCore.Mvc.Controllers.ControllerActionDescriptor
System.Collections.Generic.IList1[Microsoft.AspNetCore.Mvc.Abstractions.ParameterDescriptor] Parameters System.Collections.Generic.IList
1[Microsoft.AspNetCore.Mvc.Abstractions.ParameterDescriptor]
Коллекция System.Collections.Generic.List1[Microsoft.AspNetCore.Mvc.Abstractions.ParameterDescriptor] System.Collections.Generic.IEnumerable
1[Microsoft.AspNetCore.Mvc.Abstractions.ParameterDescriptor]
System.Collections.Generic.IEnumerable`1[Microsoft.AspNetCore.Mvc.Abstractions.ParameterDescriptor]
Microsoft.AspNetCore.Mvc.Abstractions.ParameterDescriptor
Microsoft.AspNetCore.Mvc.ModelBinding.BindingInfo
Microsoft.AspNetCore.Mvc.ModelBinding.BindingInfo
Внутренние сообщения об исключениях:
System.Reflection.TargetInvocationException: цель вызова сгенерировала исключение.
System.ArgumentException: тип «System.Object» должен реализовывать «Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder», который будет использоваться в качестве связывателя модели. (Параметр «значение»)
@TroyHouston Я тоже столкнулся с этой проблемой. Я исправил это, используя атрибут [Жадность] на моем контроллере.
Я использую Нунит :)
@Fjsmoreira Спасибо! Это тоже работает для меня :)
Я знаю, что этот вопрос закрыт, но мне нужна помощь, чтобы понять, откуда берется атрибут [Жадность]. @Fjsmoreira или @TroyHouston , какой пакет/библиотеку мне нужно использовать, чтобы получить атрибут [Жадный]?
Я знаю, что этот вопрос закрыт, но мне нужна помощь, чтобы понять, откуда берется атрибут [Жадность]. @Fjsmoreira или @TroyHouston , какой пакет/библиотеку мне нужно использовать, чтобы получить атрибут [Жадный]?
Не бери в голову. Догадаться! Похоже, это часть пакета AutoFixture.Xunit .
Я знаю, что это закрыто, но для других людей, которые сталкиваются с этим, кто _arent_ использует Xunit, быстрый (ленивый) обходной путь должен сделать
Fixture.Customize<BindingInfo>(c => c.OmitAutoProperties());
-- я уверен, что есть способ _also_ исправить bindingInfo, если он вам нужен, но если вы этого не сделаете в своих тестах...
Решил проблему с OmitAutoProperties
:
var controller = fixture.Build<SomeController>().OmitAutoProperties().Create()
;
Самый полезный комментарий
Я знаю, что это закрыто, но для других людей, которые сталкиваются с этим, кто _arent_ использует Xunit, быстрый (ленивый) обходной путь должен сделать
Fixture.Customize<BindingInfo>(c => c.OmitAutoProperties());
-- я уверен, что есть способ _also_ исправить bindingInfo, если он вам нужен, но если вы этого не сделаете в своих тестах...