【问题标题】:Fluent Assertions PropertyInfo BeDecoratedWithFluent 断言 PropertyInfo BeDecoratedWith
【发布时间】:2013-09-12 07:33:54
【问题描述】:

.NET FluentAssertions 库(版本 2.1.0)有几个 BeDecoratedWith<T>() 实现,用于断言类型(或类型成员)具有应用于它的给定属性。这些调用如下所示:

typeof(X).Should()
    .BeDecoratedWith<SomeAttribute>(attr => attr.Name == expectedValue);

lambda 表达式断言该属性的 Name 等于某些 expectedValue

sut 是一个类型时,这很好,但是当它是一个成员时,没有BeDecoratedWith&lt;T&gt; 的重载接受一个lambda 表达式。

// compiler error: Cannot convert lambda expression to type 'string' because it is not a delegate type
typeof(X).GetProperty("xyz").Should()
    .BeDecoratedWith<SomeAttribute>(attr => attr.Name == expectedValue);

该文档很快涵盖了extensibility,但我无法弄清楚如何在PropertyInfoAssertions 类上创建BeDecoratedWith&lt;T&gt; 的重载(或扩展方法),该类接受类似于上述的lambda。

有人可以告诉我扩展 Fluent Assertions 以实现此目的的正确方法吗?

【问题讨论】:

  • 那么,您有什么特别的问题吗?
  • 扩展库的最佳方式。看起来我可以扩展ProprtyInfoAssertions,但是我必须自己重新编写所有属性处理代码,这似乎是错误的。
  • 好的,现在我明白问题所在了。

标签: c# fluent-assertions


【解决方案1】:

你有两个选择:

  1. 在 PropertyInfoAssertions 上创建一个支持 lambda 表达式并使用 SubjectProperties 属性访问实际属性的扩展方法。
  2. fork GitHub 上的存储库并将其直接添加到框架中。我会接受拉取请求。

【讨论】:

  • 好的,看来我需要分叉代码才能“正确”地做到这一点。谢谢指点。
  • 不,您不必这样做。您仍然可以使用选项 1。如果您希望我将其包含在 2.2 中,您只需要选项 2。
【解决方案2】:

一个可能的答案是稍等片刻,然后获取最新版本,因为这个问题最近似乎已经解决了:)

http://fluentassertions.codeplex.com/workitem/12455

【讨论】:

  • 这不能解决我的问题。我正在使用该代码,但希望它做得更多。
猜你喜欢
  • 2020-06-13
  • 2022-10-24
  • 2018-02-07
  • 2021-08-27
  • 2018-03-21
  • 2016-04-25
  • 2022-04-22
  • 2012-08-26
  • 2016-11-02
相关资源
最近更新 更多