FluentAssertions:ShouldBeEquivalentTo方法仍然调用Object.Equals()?

时间:2013-01-09 14:59:22

标签: c# unit-testing fluent-assertions

我有一个类,我们称之为Foo,这是一种值类型,因此会覆盖Equals / GetHashCode()方法。在一个单独的测试夹具中,我想断言Foo上的所有属性都已正确设置,而不仅仅是用于相等的属性。出于这个原因,我的测试断言专门使用ShouldBeEquivalentTo方法,文档建议将两个对象视为等效,如果“两个对象图具有相同值的相同属性,而不管这些对象的类型。 “

然而,似乎ShouldBeEquivalentTo调用Foo.Equals方法,得到一个真实的结果然后继续短路ShouldBeEquivalentTo承诺的基于反射的属性匹配。

这是预期的行为吗?如果是这样,在检查FA源时,我没有看到改变这种行为的简单方法(IEquivalencyStep被声明为内部)。还有其他方法来解决这个问题吗?

编辑: 丹尼斯:是的,我所比较的两个对象属于同一类型。总而言之,我已经在类Foo上覆盖了Equals,但是不希望FA在我的单元测试中使用这种相等的概念。

1 个答案:

答案 0 :(得分:0)

我认为你不能改变这个函数的行为,它假设你覆盖Equals - 比你想要比较的方式相同。您可以尝试以下功能:

dto.ShouldHave().SharedProperties().EqualTo(foo);

或者您可以在Foo类NativeEquals方法中实现,该方法将调用base.Equals(),然后明确地使用此方法进行比较,它将非常适用于值类型。