无法使用 FluentAssertions 读取动态属性
Cannot read dynamic properties with FluentAssertions
我在单元测试中使用 XUnit 和 c sharp 中的 fluentassertions。下面是我获取动态类型、将动态对象转换为该动态类型并尝试执行断言的地方:
var dynamicType = Type.GetType(...);
dynamic? myObject = JsonSerializer.Deserialize(myJSONData, dynamicType);
myObject!.Products!.Should().NotBeNull();
如果我对其进行调试,myObject 确实具有所需的属性和值,但是 c sharp 和 fluentassertion 会抛出此错误:
Microsoft.CSharp.RuntimeBinder.RuntimeBinderException : 'xxxxx.Products' does not contain a definition for 'Should'
是否可以进行比较,还是我遗漏了什么?
这是 .NET 中的一个限制。
它不支持 dynamic
个对象的扩展方法。
解决方法是将 myObject
转换为 object
,以便在编译时确定 Should
的适当重载。
一些相关问题:
这是一种简单的方法,如果您的对象是动态的,只需在断言前面添加 (object) cast。
(object) myObject!.Products!.Should().NotBeNull();
您需要导入 System.Object。
我在单元测试中使用 XUnit 和 c sharp 中的 fluentassertions。下面是我获取动态类型、将动态对象转换为该动态类型并尝试执行断言的地方:
var dynamicType = Type.GetType(...);
dynamic? myObject = JsonSerializer.Deserialize(myJSONData, dynamicType);
myObject!.Products!.Should().NotBeNull();
如果我对其进行调试,myObject 确实具有所需的属性和值,但是 c sharp 和 fluentassertion 会抛出此错误:
Microsoft.CSharp.RuntimeBinder.RuntimeBinderException : 'xxxxx.Products' does not contain a definition for 'Should'
是否可以进行比较,还是我遗漏了什么?
这是 .NET 中的一个限制。
它不支持 dynamic
个对象的扩展方法。
解决方法是将 myObject
转换为 object
,以便在编译时确定 Should
的适当重载。
一些相关问题:
这是一种简单的方法,如果您的对象是动态的,只需在断言前面添加 (object) cast。
(object) myObject!.Products!.Should().NotBeNull();
您需要导入 System.Object。