NUnit 或 Fluent Assertions 测试引用是不是相等?

Posted

技术标签:

【中文标题】NUnit 或 Fluent Assertions 测试引用是不是相等?【英文标题】: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 以阻止人们使用它。 【参考方案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

【讨论】:

以上是关于NUnit 或 Fluent Assertions 测试引用是不是相等?的主要内容,如果未能解决你的问题,请参考以下文章

Fluent Assertions:大致比较一个类的属性

Fluent-ASsertions ShouldRaisePropertyChangeFor 不适用于异步任务?

如何使用 Fluent Assertions 引发异常?

Fluent Assertions Should().BeEquivalentTo 只有私有字段

Fluent Assertions ShouldBeEquivalentTo 总是以不同的属性传递

Fluent Assertions:大致比较两个 2D 矩形阵列