Autofixture: dotnet core 3.0: no se puede crear una instancia desde Microsoft.AspNetCore.Mvc.ModelBinding.BindingInfo

Creado en 26 sept. 2019  ·  6Comentarios  ·  Fuente: AutoFixture/AutoFixture

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.IList 1[Microsoft.AspNetCore.Mvc.Abstractions.ParameterDescriptor] Parameters System.Collections.Generic.IList 1[Microsoft.AspNetCore.Mvc.Abstractions.ParameterDescriptor]
System.Collections.Generic.List 1[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')

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...

Todos 6 comentarios

@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() ;

¿Fue útil esta página
0 / 5 - 0 calificaciones