c# - FluentAssertions : ShouldBeEquivalentTo method still invokes Object. 等于()?

标签 c# unit-testing fluent-assertions

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

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

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

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

最佳答案

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

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

或者您可以在 Foo 类中实现 NativeEquals 方法,该方法将调用 base.Equals() ,然后显式使用此方法进行比较,这对值类型。

关于c# - FluentAssertions : ShouldBeEquivalentTo method still invokes Object. 等于()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14238064/

相关文章:

laravel - 单元测试、集成测试还是功能测试?

c# - FluentAssertions 排除重复配置

c# - 如何验证多个排序已应用于集合?

c# - 使用 FluentAssertions 比较两个包含不同类型的字典集合

c# - 使用 Entity Framework Core、npgsql、PostgreSQL 创建新数据库

python - 我应该对私有(private)/ protected 方法进行单元测试吗

c# - C# WebApi 中的实时 FLV 流式传输

c# - 如何在单元测试中使用 Moq 在异步方法中返回传递的参数?

C# MYSQL - "Tunnel"通过防火墙

c# - Sqlite 数据库给我警告