現在、単純なプロジェクトをdotnet core 3にアップグレードしています。このプロジェクトには多数の単体テストがあり、その大部分はAutoFixtureとxunit2を使用したコントローラー/ APIレイヤーに対して行われます。
アップグレード後、コントローラーを作成しようとする自動フィクスチャ単体テストを除いて、すべてが機能しています。 次の例外で失敗します。
AutoFixture.ObjectCreationExceptionWithPath:AutoFixtureは、Microsoft.AspNetCore.Mvc.ModelBinding.BindingInfoからインスタンスを作成できませんでした。これは、作成が予期せず例外で失敗したためです。 失敗の根本原因を調査するには、内部例外を参照してください。
リクエストパス:
* .Inventory.Api.Controllers.ProductCategoriesControllerコントローラー* .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]コレクション
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
内部例外メッセージ:
System.Reflection.TargetInvocationException:呼び出しのターゲットによって例外がスローされました。
System.ArgumentException:タイプ「System.Object」は、モデルバインダーとして使用される「Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder」を実装する必要があります。 (パラメータ '値')
@TroyHouston私もこの問題に遭遇しました。 コントローラの[Greedy]属性を使用して修正しました。
私はNunitを使用しています:)
@Fjsmoreiraありがとう! それは私にとってもうまくいきます:)
この問題が解決されたことは知っていますが、[Greedy]属性がどこから来ているのかを理解するのに助けが必要です。 @Fjsmoreiraまたは@TroyHouston 、[Greedy]属性を取得するためにどのパッケージ/ライブラリを使用する必要がありますか?
この問題が解決されたことは知っていますが、[Greedy]属性がどこから来ているのかを理解するのに助けが必要です。 @Fjsmoreiraまたは@TroyHouston 、[Greedy]属性を取得するためにどのパッケージ/ライブラリを使用する必要がありますか?
どうでも。 理解した! AutoFixture.Xunitパッケージの一部のようです。
私はこれが閉鎖されていることを知っていますが、これに遭遇した他の人々にとって、Xunitを使用して_arent_することは速い(怠惰な)回避策です
Fixture.Customize<BindingInfo>(c => c.OmitAutoProperties());
-必要に応じてbindingInfoを修正する方法があると確信していますが、テストに参加しない場合は...
OmitAutoProperties
で問題を解決しました:
var controller = fixture.Build<SomeController>().OmitAutoProperties().Create()
;
最も参考になるコメント
私はこれが閉鎖されていることを知っていますが、これに遭遇した他の人々にとって、Xunitを使用して_arent_することは速い(怠惰な)回避策です
Fixture.Customize<BindingInfo>(c => c.OmitAutoProperties());
-必要に応じてbindingInfoを修正する方法があると確信していますが、テストに参加しない場合は...