无法使用FluentAssertions读取动态属性



我在c sharp中使用XUnit和fluentasserations进行单元测试。下面是我获得动态类型的地方,将动态对象转换为该动态类型,并尝试进行断言:

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的适当过载。

一些相关问题:

  • https://github.com/fluentassertions/fluentassertions/issues/234
  • https://github.com/fluentassertions/fluentassertions/issues/473
  • https://github.com/fluentassertions/fluentassertions/issues/1493
  • https://github.com/fluentassertions/fluentassertions/issues/1738

这是一种简单的方法,如果您的对象是动态的,只需在断言前面添加(对象(强制转换。

(object) myObject!.Products!.Should().NotBeNull();

您需要导入系统。对象

相关内容

  • 没有找到相关文章

最新更新