【问题标题】:NUnit or Fluent Assertions test for reference equality?NUnit 或 Fluent Assertions 测试引用是否相等?
【发布时间】:2013-07-18 11:36:29
【问题描述】:

我正在使用 NUnit 2.6.2 + Fluent Assertions 2.0.1。

我想断言两个引用不指向同一个对象实例。我找不到 干净 的方式来表达这一点。

NUnitAssert.ReferenceEquals(ref1, ref2) - 但我找不到 negated 断言。

Fluent Assertions 中我找不到任何可以直接支持这种情况的内容。

我能做到的唯一方法是这样的:

NUnit:Assert.False(object.ReferenceEquals(ref1, ref2));

流利:object.ReferenceEquals(ref1, ref2).Should().BeFalse();

就最小噪音而言,这两者似乎都不理想。有没有更好的办法?

【问题讨论】:

  • NUnit 没有 Assert.ReferenceEquals(ref1, ref2)。所有对象都有一个静态方法 ReferenceEquals,对于 Assert,它一直是 overloaded to fail 以阻止人们使用它。

标签: c# unit-testing reference nunit fluent-assertions


【解决方案1】:

你可以使用 NotBeSameAs() 方法:

ref1.Should().NotBeSameAs(ref2);

它的文档说:

断言一个对象引用引用了一个不同的对象 另一个对象引用。

【讨论】:

  • 正是我想要的!我并不清楚[Not]BeSameAs() 做了什么,我也没有阅读描述。谢谢!
  • 这就是 (Not)BeSameAs() 和 (Not)Be 之间的最大区别。前者使用引用相等,后者使用object.Equals()。
【解决方案2】:

您可以在 Nunit 3.x here987654321@ 中使用 Is.Not.SameAs()

var x = new object();
Assert.That(x, Is.SameAs(x)); // success
Assert.That(x, Is.Not.SameAs(x)); // fail

var y = new object();
Assert.That(x, Is.SameAs(y)); // fail
Assert.That(x, Is.Not.SameAs(y)); // success

【讨论】:

    猜你喜欢
    • 2016-05-02
    • 2022-01-22
    • 1970-01-01
    • 2020-05-02
    • 1970-01-01
    • 2016-11-12
    • 2016-01-13
    • 2016-10-26
    相关资源
    最近更新 更多