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



我有一个类,让我们称之为Foo,这是一个值类型,因此覆盖了Equals/GetHashCode()方法。在一个单独的测试装置中,我想断言Foo上的所有属性都已正确设置,而不仅仅是用于相等的属性。出于这个原因,我的测试断言特别使用ShouldBeEquivalentTo方法,文档建议如果"两个对象图具有具有相同值的相同命名属性,而不管这些对象的类型如何",则该方法将认为两个对象是等价的。

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

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

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

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

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

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

相关内容

  • 没有找到相关文章

最新更新