我目前正在将一个简单的项目升级到 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包的一部分。
我知道这是关闭的,但是对于遇到此问题的其他人_arent_使用Xunit,快速(懒惰)的解决方法是
Fixture.Customize<BindingInfo>(c => c.OmitAutoProperties());
——如果你需要,我确信有一种方法可以_也_修复 bindingInfo,但如果你不在测试中......
解决了OmitAutoProperties
的问题:
var controller = fixture.Build<SomeController>().OmitAutoProperties().Create()
;
最有用的评论
我知道这是关闭的,但是对于遇到此问题的其他人_arent_使用Xunit,快速(懒惰)的解决方法是
Fixture.Customize<BindingInfo>(c => c.OmitAutoProperties());
——如果你需要,我确信有一种方法可以_也_修复 bindingInfo,但如果你不在测试中......