繁体   English   中英

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

[英]FluentAssertions: ShouldBeEquivalentTo method still invokes Object.Equals()?

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

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

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

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

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

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

或者你可以在Foo类的NativeEquals方法中实现,它将调用base.Equals() ,然后显式地使用这个方法进行比较,它对于值类型非常有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM