Je suis actuellement en train de mettre à niveau un projet simple vers dotnet core 3. Ce projet comporte un certain nombre de tests unitaires, la majorité contre la couche contrôleur/api utilisant AutoFixture & xunit2.
Après la mise à niveau, tout fonctionne SAUF les tests unitaires d'autofixture qui tentent de créer un contrôleur. Ils échouent à l'exception suivante :
AutoFixture.ObjectCreationExceptionWithPath : AutoFixture n'a pas pu créer une instance à partir de Microsoft.AspNetCore.Mvc.ModelBinding.BindingInfo car la création a échoué de manière inattendue avec une exception. Veuillez vous reporter à l'exception interne pour rechercher la cause première de l'échec.
Chemin de requête :
*.Inventory.Api.Controllers.ProductCategoriesController contrôleur* .Inventory.Api.Controllers.ProductCategoriesController
Microsoft.AspNetCore.Mvc.ControllerContext ControllerContext
Microsoft.AspNetCore.Mvc.ControllerContextMicrosoft.AspNetCore.Mvc.ControllerContext
Microsoft.AspNetCore.Mvc.Controllers.ControllerActionDescriptor ActionDescriptor
Microsoft.AspNetCore.Mvc.Controllers.ControllerActionDescriptorMicrosoft.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] collection
System.Collections.Generic.IEnumerable`1[Microsoft.AspNetCore.Mvc.Abstractions.ParameterDescriptor]
Microsoft.AspNetCore.Mvc.Abstractions.ParameterDescriptorMicrosoft.AspNetCore.Mvc.Abstractions.ParameterDescriptor
Microsoft.AspNetCore.Mvc.ModelBinding.BindingInfo BindingInfo
Microsoft.AspNetCore.Mvc.ModelBinding.BindingInfo
Messages d'exception internes :
System.Reflection.TargetInvocationException : une exception a été levée par la cible d'un appel.
System.ArgumentException : Le type 'System.Object' doit implémenter 'Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder' pour être utilisé comme classeur de modèle. (Paramètre 'valeur')
@TroyHouston J'ai également rencontré ce problème. Je l'ai corrigé en utilisant l'attribut [Greedy] sur mon contrôleur.
J'utilise Nunit :)
@Fjsmoreira Merci ! Moi aussi ça marche :)
Je sais que ce problème est clos, mais j'ai besoin d'aide pour comprendre d'où vient l'attribut [Greedy]. @Fjsmoreira ou @TroyHouston , quel package/bibliothèque dois-je utiliser pour obtenir l'attribut [Greedy] ?
Je sais que ce problème est clos, mais j'ai besoin d'aide pour comprendre d'où vient l'attribut [Greedy]. @Fjsmoreira ou @TroyHouston , quel package/bibliothèque dois-je utiliser pour obtenir l'attribut [Greedy] ?
Ça ne fait rien. Deviner! On dirait que cela fait partie du package AutoFixture.Xunit .
Je sais que c'est fermé, mais pour les autres personnes qui se heurtent à cela et qui n'utilisent pas Xunit, la solution de contournement rapide (paresseuse) consiste à faire
Fixture.Customize<BindingInfo>(c => c.OmitAutoProperties());
- Je suis sûr qu'il existe un moyen de corriger _également_ les informations de liaison si vous en avez besoin, mais si vous ne le faites pas dans vos tests ...
Résolu le problème avec OmitAutoProperties
:
var controller = fixture.Build<SomeController>().OmitAutoProperties().Create()
;
Commentaire le plus utile
Je sais que c'est fermé, mais pour les autres personnes qui se heurtent à cela et qui n'utilisent pas Xunit, la solution de contournement rapide (paresseuse) consiste à faire
Fixture.Customize<BindingInfo>(c => c.OmitAutoProperties());
- Je suis sûr qu'il existe un moyen de corriger _également_ les informations de liaison si vous en avez besoin, mais si vous ne le faites pas dans vos tests ...