Actualmente estoy en el proceso de actualizar un proyecto simple a dotnet core 3. Este proyecto tiene una serie de pruebas unitarias, la mayoría contra la capa del controlador/api usando AutoFixture y xunit2.
Después de la actualización, todo funciona EXCEPTO las pruebas unitarias de dispositivos automáticos que intentan crear un controlador. Fallan con la siguiente excepción:
AutoFixture.ObjectCreationExceptionWithPath: AutoFixture no pudo crear una instancia desde Microsoft.AspNetCore.Mvc.ModelBinding.BindingInfo porque la creación falló inesperadamente con una excepción. Consulte la excepción interna para investigar la causa raíz del error.
Solicitud de ruta:
*.Inventory.Api.Controllers.ProductCategoriesController controlador* .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]
System.Collections.Generic.List1[Microsoft.AspNetCore.Mvc.Abstractions.ParameterDescriptor] System.Collections.Generic.IEnumerable
1[Microsoft.AspNetCore.Mvc.Abstractions.ParameterDescriptor] colección
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
Mensajes de excepción internos:
System.Reflection.TargetInvocationException: el destino de una invocación ha lanzado una excepción.
System.ArgumentException: el tipo 'System.Object' debe implementar 'Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder' para usarse como enlazador de modelos. (Parámetro 'valor')
@TroyHouston También me encontré con este problema. Lo arreglé usando el atributo [Greedy] en mi controlador.
Estoy usando Nunit :)
@Fjsmoreira ¡Gracias! Eso también funciona para mí :)
Sé que este problema está cerrado, pero necesito ayuda para comprender de dónde proviene el atributo [Greedy]. @Fjsmoreira o @TroyHouston , ¿qué paquete/biblioteca debo usar para obtener el atributo [Codicioso]?
Sé que este problema está cerrado, pero necesito ayuda para comprender de dónde proviene el atributo [Greedy]. @Fjsmoreira o @TroyHouston , ¿qué paquete/biblioteca debo usar para obtener el atributo [Codicioso]?
No importa. ¡Lo averigué! Parece que es parte del paquete AutoFixture.Xunit .
Sé que esto está cerrado, pero para otras personas que se encuentran con esto que _no_ usan Xunit, la solución rápida (perezosa) es hacer
Fixture.Customize<BindingInfo>(c => c.OmitAutoProperties());
-- Estoy seguro de que hay una manera de _también_ arreglar bindingInfo si lo necesita, pero si no lo hace en sus pruebas...
Resolvió el problema con OmitAutoProperties
:
var controller = fixture.Build<SomeController>().OmitAutoProperties().Create()
;
Comentario más útil
Sé que esto está cerrado, pero para otras personas que se encuentran con esto que _no_ usan Xunit, la solución rápida (perezosa) es hacer
Fixture.Customize<BindingInfo>(c => c.OmitAutoProperties());
-- Estoy seguro de que hay una manera de _también_ arreglar bindingInfo si lo necesita, pero si no lo hace en sus pruebas...