FluentAssertions: ShouldBeEquivalentTo方法仍然调用Object.Equals()
本文关键字:Object Equals 调用 ShouldBeEquivalentTo 方法 FluentAssertions | 更新日期: 2023-09-27 17:51:03
我有一个类,让我们称之为Foo
,这是一个值类型,因此覆盖了Equals
/GetHashCode()
方法。在一个单独的测试装置中,我想断言Foo上的所有属性都已正确设置,而不仅仅是用于相等的属性。出于这个原因,我的测试断言特别使用ShouldBeEquivalentTo
方法,文档建议如果"两个对象图具有具有相同值的相同命名属性,而不管这些对象的类型如何",则该方法将认为两个对象是等价的。
然而,ShouldBeEquivalentTo
似乎调用了Foo.Equals
方法,得到了一个真实的结果,然后继续短路ShouldBeEquivalentTo
承诺的基于反射的属性匹配。
这是预期行为吗?如果是这样,在检查FA源时,我发现没有简单的方法来改变这种行为(IEquivalencyStep
被声明为内部)。还有其他方法可以解决这个问题吗?
编辑:丹尼斯:是的,我比较的两件物品是同一种类型的。总而言之,我已经覆盖了类Foo上的Equals
,但不希望FA在我的单元测试中使用这个相等的概念。
我认为你不能改变这个函数的行为,它假设如果你覆盖Equals
-比你想比较是相同的方式。您可以尝试以下函数:
dto.ShouldHave().SharedProperties().EqualTo(foo);
或者您可以在Foo类中实现NativeEquals
方法,该方法将调用base.Equals()
,然后显式地使用该方法进行比较,它将非常适合值类型