c# - 流畅的断言 : Be() vs Equals()

标签 c# unit-testing fluent-assertions

有什么区别:

  • subject.Should().Be(预期)
  • subject.Should().Equals(预期)

我总是使用 Be(),但我现在有一个测试用例,其中 Be() 给出不同的结果,然后 Equals() 。我的测试用例涉及一个结构并将其与该结构的默认值进行比较。

MyStruct subject = new MyStruct("value");

Assert.Equal(default, subject);                  // xUnit Assert => works
Assert.Equal(default(MyStruct), (object)subject); // xUnit Assert => works
subject.Should().Equals(default);                // works
subject.Should().Be(default(MyStruct));          // FAILS!

Be() 和 Equal() 是否相同,这是 Fluent Assertions 中的错误吗?或者他们主张不同的事情?

最佳答案

Equals 方法来自 System.Object
实际上,您将 ObjectAssertions 类型的对象与 object(null) 的默认值进行比较。

这不是断言。
该方法返回一个 false 的 bool 值。

enter image description here

关于c# - 流畅的断言 : Be() vs Equals(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61556309/

相关文章:

c# - 在 fluentassertion 上调用异步任务

c# - Nest Client c# 7.0 用于 Elasticsearch 删除别名

java - 让 EasyMock 模拟对象抛出异常

unit-testing - 在测试方法中本地覆盖 Ninject 绑定(bind)以绑定(bind)模拟对象

unit-testing - 如何在 f# 中为模式匹配创建 fsunit 测试?

c# - 为什么在使用 "Including"时 FluentAssertions 中会忽略嵌套类?

c# - 命名空间阴影类名称

c# - 重用经过验证的 Mock

c# - 如何在不转换为日期时间的情况下截断 "Ticks"的毫秒数?

c# - FluentAssertions 断言已为重载运算符抛出异常