NUnit或Fluent Assertions测试参考相等性?

Cri*_*scu 11 c# nunit unit-testing reference fluent-assertions

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

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

NUnitAssert.ReferenceEquals(ref1, ref2)- 但我找不到否定的断言.

Fluent Assertions中,我找不到任何可以直接支持此场景的内容.

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

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

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

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

Ufu*_*arı 13

您可以使用NotBeSameAs()方法:

ref1.Should().NotBeSameAs(ref2);
Run Code Online (Sandbox Code Playgroud)

它的文件说:

断言对象引用是指与另一个对象引用引用的不同对象.

  • 这是(Not)BeSameAs()和(Not)Be之间的最大区别.前者使用引用相等,后者使用引用相等.Equals(). (3认同)

chr*_*389 5

您可以在此处将 Is.Not.SameAs() 与 Nunit 3.x 一起使用

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
Run Code Online (Sandbox Code Playgroud)