Ich bin gerade dabei, ein einfaches Projekt auf dotnet Core 3 zu aktualisieren. Dieses Projekt hat eine Reihe von Komponententests, die meisten gegen die Controller-/API-Schicht mit AutoFixture & xunit2.
Nach dem Upgrade funktioniert alles AUSSER den Autofixture-Einheitentests, die versuchen, einen Controller zu erstellen. Sie schlagen mit der folgenden Ausnahme fehl:
AutoFixture.ObjectCreationExceptionWithPath : AutoFixture konnte keine Instanz von Microsoft.AspNetCore.Mvc.ModelBinding.BindingInfo erstellen, da die Erstellung unerwartet mit einer Ausnahme fehlgeschlagen ist. Bitte beziehen Sie sich auf die innere Ausnahme, um die Grundursache des Fehlers zu untersuchen.
Anfragepfad:
*.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]
System.Collections.Generic.List1[Microsoft.AspNetCore.Mvc.Abstractions.ParameterDescriptor] System.Collections.Generic.IEnumerable
1[Microsoft.AspNetCore.Mvc.Abstractions.ParameterDescriptor]-Auflistung
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
Innere Ausnahmemeldungen:
System.Reflection.TargetInvocationException: Ausnahme wurde vom Ziel eines Aufrufs ausgelöst.
System.ArgumentException: Der Typ „System.Object“ muss „Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder“ implementieren, um als Modellbinder verwendet zu werden. (Parameterwert')
@TroyHouston Ich bin auch auf dieses Problem gestoßen. Ich habe es behoben, indem ich das [Greedy]-Attribut auf meinem Controller verwendet habe.
Ich benutze Nunit :)
@Fjsmoreira Danke! Das funktioniert bei mir auch :)
Ich weiß, dass dieses Problem geschlossen ist, aber ich brauche etwas Hilfe, um zu verstehen, woher das Attribut [Gierig] kommt. @Fjsmoreira oder @TroyHouston , welches Paket/welche Bibliothek muss ich verwenden, um das [Greedy]-Attribut zu erhalten?
Ich weiß, dass dieses Problem geschlossen ist, aber ich brauche etwas Hilfe, um zu verstehen, woher das Attribut [Gierig] kommt. @Fjsmoreira oder @TroyHouston , welches Paket/welche Bibliothek muss ich verwenden, um das [Greedy]-Attribut zu erhalten?
Macht nichts. Herausgefunden! Sieht so aus, als wäre es Teil des AutoFixture.Xunit -Pakets.
Ich weiß, dass dies geschlossen ist, aber für andere Leute, die darauf stoßen und _nicht_ Xunit verwenden, ist die schnelle (faule) Abhilfe zu tun
Fixture.Customize<BindingInfo>(c => c.OmitAutoProperties());
-- Ich bin mir sicher, dass es eine Möglichkeit gibt, die BindingInfo _auch_ zu reparieren, wenn Sie sie brauchen, aber wenn Sie dies in Ihren Tests nicht tun ...
Habe das Problem mit OmitAutoProperties
gelöst:
var controller = fixture.Build<SomeController>().OmitAutoProperties().Create()
;
Hilfreichster Kommentar
Ich weiß, dass dies geschlossen ist, aber für andere Leute, die darauf stoßen und _nicht_ Xunit verwenden, ist die schnelle (faule) Abhilfe zu tun
Fixture.Customize<BindingInfo>(c => c.OmitAutoProperties());
-- Ich bin mir sicher, dass es eine Möglichkeit gibt, die BindingInfo _auch_ zu reparieren, wenn Sie sie brauchen, aber wenn Sie dies in Ihren Tests nicht tun ...