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。
我想断言两个引用不指向同一个对象实例。我找不到 干净 的方式来表达这一点。
NUnit 有 Assert.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 ShouldRaisePropertyChangeFor 不适用于异步任务?
Fluent Assertions Should().BeEquivalentTo 只有私有字段