【问题标题】:How to use Exclude in FluentAssertions for property in collection of collections?如何在 FluentAssertions 中将 Exclude 用于集合集合中的属性?
【发布时间】:2022-02-14 17:58:06
【问题描述】:

我有两条记录:

public record A(string AId, IReadOnlyList<B> list)

public record B(string BId, string Color)

我想使用流利的断言来比较 A 的实例集合,同时排除 proberty BId

例如: 假设我有

FirstCollection = {{AId:"AId1", BId:"BId1 ,Color:"Red"} ,{AId:"AId2", BId:"BId2", Color:"Red"}}

SecondCollection = {{AId:"AId1", BId:"BId3", Color:"Red"} ,{AId:"AId2", BId:"BId4", Color:"Red"}}

断言以下两个集合应该通过。

【问题讨论】:

  • 能给我举个例子吗?我对您的理解正确,您想确保两个实例具有相同的字符串 AId,并且列表的所有元素具有相同的颜色,但可能具有不同的 BId?
  • 对,就是这样。如果有帮助,请添加一个示例
  • 请包括minimal, complete and verifiable example。如果我们必须猜测您的代码,很难为您提供帮助。

标签: c# unit-testing fluent-assertions


【解决方案1】:

您可以使用Excluding 方法,如下所示:

expected.ShouldBeEquivalentTo(actual, options => options.Excluding(s => 
   (s.RuntimeType == typeof(B)) && (s.PropertyPath.EndsWith("BId")));

https://github.com/fluentassertions/fluentassertions/issues/500

【讨论】:

  • 没用。我认为这可能与我断言 A 的集合有关。所以这里的配置被添加到没有 BId 的 A 的实例中。
  • @omarkh您需要根据您正在寻找的内容更改此行,如果没有看到您的代码,很难提供有效的答案。
  • 对不起,如果我不清楚。我想比较两个 A 的实例集合。其中 A 的每个实例应该具有相同的 AId 和颜色,但不必是相同的 BId。如果有帮助,请添加一个示例
  • @omarkh 请试试这个,让我知道它是否有效expected.ShouldBeEquivalentTo(actual, options =&gt; options.Excluding(s =&gt; (Regex.IsMatch(s.SelectedMemberPath, "list\[.+\].BId"));
  • 也没有工作。试图在不比较 BId 和断言有效的情况下覆盖 B 类上的 equal。我会说 Excluding 方法在您的代码中没有按预期工作
猜你喜欢
  • 2014-04-04
  • 1970-01-01
  • 2019-12-15
  • 2021-09-23
  • 2013-05-04
  • 2021-12-11
  • 2016-10-15
  • 2018-09-22
  • 1970-01-01
相关资源
最近更新 更多