4

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

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

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

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

4

1 回答 1

0

I think you cannot alter behavior of this function, it assumes that if you override Equals - than you want comparison to be the same way. You can try the following function:

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

Or you can implement in Foo class NativeEquals method which will be calling base.Equals() , and then use this method explicitly for comparison, it will work great for value types.

于 2013-01-09T15:52:54.823 回答