全部:
我正在尝试编写一个简短的C#应用程序,在其中我试图运行两个我希望两者都为真的NUnit声明语句:
Assert.AreEqual(object1,object1); Assert.AreNotSame(object1,object2);
似乎有可能,但我没有碰到这种特殊情况。我想实例化两个对象(上面的object1,object2),使用.Equals()时应评估为true,但如果使用“ ==”运算符,则应评估为false。
NUnit可以这样做吗?
谢谢!
答案 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。