我有一个类,我们称它为 Foo
,它是一个值类型,因此会覆盖 Equals
/GetHashCode()
方法。在一个单独的测试夹具中,我想断言 Foo 上的所有属性都已正确设置,而不仅仅是用于相等的属性。出于这个原因,我的测试断言特别使用了 ShouldBeEquivalentTo
方法,文档建议如果“两个对象图具有具有相同值的相同名称的属性,无论类型如何,都将认为两个对象是等价的”那些对象。”
但是,ShouldBeEquivalentTo
似乎调用了 Foo.Equals
方法,得到了一个真实的结果,然后继续短路匹配 ShouldBeEquivalentTo 的基于反射的属性
promise 。
这是预期的行为吗?如果是这样,在检查 FA 源代码时,我发现没有简单的方法来改变这种行为(IEquivalencyStep
声明为内部)。还有其他方法可以解决这个问题吗?
编辑:
丹尼斯:是的,我比较的两个对象属于同一类型。总而言之,我已经覆盖了类 Foo 上的 Equals
,但不希望 FA 在我的单元测试中使用这种相等性概念。
最佳答案
我认为你不能改变这个函数的行为,它假定如果你覆盖 Equals
- 比你希望比较的方式相同。您可以尝试以下功能:
dto.ShouldHave().SharedProperties().EqualTo(foo);
或者您可以在 Foo 类中实现 NativeEquals
方法,该方法将调用 base.Equals()
,然后显式使用此方法进行比较,这对值类型。
关于c# - FluentAssertions : ShouldBeEquivalentTo method still invokes Object. 等于()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14238064/