我有一个类,我们称之为Foo
,这是一种值类型,因此会覆盖Equals
/ GetHashCode()
方法。在一个单独的测试夹具中,我想断言Foo上的所有属性都已正确设置,而不仅仅是用于相等的属性。出于这个原因,我的测试断言专门使用ShouldBeEquivalentTo
方法,文档建议将两个对象视为等效,如果“两个对象图具有相同值的相同属性,而不管这些对象的类型。 “
然而,似乎ShouldBeEquivalentTo
调用Foo.Equals
方法,得到一个真实的结果然后继续短路ShouldBeEquivalentTo
承诺的基于反射的属性匹配。
这是预期的行为吗?如果是这样,在检查FA源时,我没有看到改变这种行为的简单方法(IEquivalencyStep
被声明为内部)。还有其他方法来解决这个问题吗?
编辑:
丹尼斯:是的,我所比较的两个对象属于同一类型。总而言之,我已经在类Foo上覆盖了Equals
,但是不希望FA在我的单元测试中使用这种相等的概念。
答案 0 :(得分:0)
我认为你不能改变这个函数的行为,它假设你覆盖Equals
- 比你想要比较的方式相同。您可以尝试以下功能:
dto.ShouldHave().SharedProperties().EqualTo(foo);
或者您可以在Foo类NativeEquals
方法中实现,该方法将调用base.Equals()
,然后明确地使用此方法进行比较,它将非常适用于值类型。