使用NUnit 2.6,是否可以具有两个对象,例如Assert.AreEqual和Assert.AreNotSame都为TRUE?

时间:2019-02-20 04:57:25

标签: c# object nunit assert

全部:

我正在尝试编写一个简短的C#应用​​程序,在其中我试图运行两个我希望两者都为真的NUnit声明语句:

Assert.AreEqual(object1,object1); Assert.AreNotSame(object1,object2);

似乎有可能,但我没有碰到这种特殊情况。我想实例化两个对象(上面的object1,object2),使用.Equals()时应评估为true,但如果使用“ ==”运算符,则应评估为false。

NUnit可以这样做吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

第一个问题和标题的条件为是。否最后一位关于==运算符的人!

这有效

var object1 = new MyObject(someparameter);
var object2 = new MyObject(someotherparameter);

Assert.AreNotSame(object1, object2);
Assert.AreEqual(object1, object2); // See following

但仅当您以某种对象的Equals()方法评估为true的方式覆盖它时。由您自己定义对象的相等性。

另一方面,这失败了

var object1 = new object();
var object2 = new object();

Assert.AreNotSame(object1, object2);
Assert.AreEqual(object1, object2); // Fails!

失败是因为{。{1}}在.NET中被定义为同一对象。对于以不同方式定义相等性的类,两者的行为仅不同。无论Type是.NET Type还是您自己的类型都是如此。

object上的==运算符给出对象相等(相同的对象)。它也仅对定义不同的类型起作用。对于您自己的类型,如果希望它可以工作,则必须自己定义。

顺便说一句,您的问题实际上与NUnit无关。 NUnit大多尝试模仿.NET框架为实现相等所做的事情,尽管它添加了一些“附加”,例如在使用断言时允许将int等于double。