无法使用 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。