Estou atualmente no processo de atualização de um projeto simples para o dotnet core 3. Este projeto tem uma série de testes de unidade, a maioria contra a camada de controlador/api usando AutoFixture & xunit2.
Após a atualização, tudo está funcionando, EXCETO os testes de unidade de autofixture que tentam criar um controlador. Eles falham com a seguinte exceção:
AutoFixture.ObjectCreationExceptionWithPath : AutoFixture não pôde criar uma instância de Microsoft.AspNetCore.Mvc.ModelBinding.BindingInfo porque a criação falhou inesperadamente com exceção. Consulte a exceção interna para investigar a causa raiz da falha.
Caminho da solicitação:
*.Inventory.Api.Controllers.ProductCategoriesController controller* .Inventory.Api.Controllers.ProductCategoriesController
Microsoft.AspNetCore.Mvc.ControllerContext ControllerContext
Microsoft.AspNetCore.Mvc.ControllerContext
Microsoft.AspNetCore.Mvc.Controllers.ControllerActionDescriptor ActionDescriptor
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]
Coleção 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 BindingInfo
Microsoft.AspNetCore.Mvc.ModelBinding.BindingInfo
Mensagens de exceção interna:
System.Reflection.TargetInvocationException: A exceção foi lançada pelo destino de uma invocação.
System.ArgumentException: O tipo 'System.Object' deve implementar 'Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder' para ser usado como um fichário de modelo. (Valor do parâmetro')
@TroyHouston Também me deparei com esse problema. Eu consertei usando o atributo [Greedy] no meu controlador.
Estou usando Nunit :)
@Fjsmoreira Obrigado! Isso também funciona para mim :)
Eu sei que este problema está encerrado, mas preciso de ajuda para entender de onde vem o atributo [Greedy]. @Fjsmoreira ou @TroyHouston , qual pacote/biblioteca preciso usar para obter o atributo [Greedy]?
Eu sei que este problema está encerrado, mas preciso de ajuda para entender de onde vem o atributo [Greedy]. @Fjsmoreira ou @TroyHouston , qual pacote/biblioteca preciso usar para obter o atributo [Greedy]?
Deixa pra lá. Descobri! Parece que faz parte do pacote AutoFixture.Xunit .
Eu sei que isso está fechado, mas para outras pessoas que se deparam com isso que _arent_ usando o Xunit, a solução rápida (preguiçosa) é fazer
Fixture.Customize<BindingInfo>(c => c.OmitAutoProperties());
-- Tenho certeza de que há uma maneira de _também_ corrigir bindingInfo se você precisar, mas se não precisar em seus testes ...
Resolvido o problema com OmitAutoProperties
:
var controller = fixture.Build<SomeController>().OmitAutoProperties().Create()
;
Comentários muito úteis
Eu sei que isso está fechado, mas para outras pessoas que se deparam com isso que _arent_ usando o Xunit, a solução rápida (preguiçosa) é fazer
Fixture.Customize<BindingInfo>(c => c.OmitAutoProperties());
-- Tenho certeza de que há uma maneira de _também_ corrigir bindingInfo se você precisar, mas se não precisar em seus testes ...