【问题标题】:CollectionAssert.AreEquivalent in FluentAssertions?CollectionAssert.AreEquivalent 在 FluentAssertions 中?
【发布时间】:2017-06-22 14:45:45
【问题描述】:

我正在尝试用 FluentAssertion 替换“CollectionAssert.AreEquivalent()”的用法。

我尝试过使用 ShouldAllBeEquivalentTo,但在比较不同类型的相似对象时,该函数不会失败。

在下面的示例中,两个调用都成功。我希望第二个失败。

new int[] { 1, 2 }.ShouldAllBeEquivalentTo( new int[] { 2, 1 } );       
new int[] { 1, 2 }.ShouldAllBeEquivalentTo( new string[] {"1", "2"} );  

是否有替代功能或特定选项会使第二行失败?

【问题讨论】:

  • 添加这个断言怎么样:Assert.AreEqual(list1.GetType(), list2.GetType()); ?
  • @KernelMode - 这适用于该特定示例,但我的实际案例涉及字典。我需要检查每个单独值的运行时类型。 CollectionAssert 以及 FluentAssertions 在添加已接受答案中详述的步骤后执行此操作

标签: c# fluent-assertions


【解决方案1】:

这是因为默认情况下使用TryConversionEquivalencyStep,它会将"1"1 视为相同(尝试转换后)。

先尝试删除它:

AssertionOptions.EquivalencySteps.Remove<TryConversionEquivalencyStep>();

Source

【讨论】:

  • 感谢您的回答!在阅读了更多关于它的信息之后,似乎这将成为 FluentAssertions 5 - relevant discussion 中的默认值。
猜你喜欢
  • 1970-01-01
  • 2011-03-20
  • 1970-01-01
  • 2021-07-29
  • 2013-11-20
  • 2020-09-16
  • 2022-11-14
  • 2019-07-28
  • 2018-11-18
相关资源
最近更新 更多