Условно да к первому вопросу и названию.Нет до последнего оператор ==
!
Это работает
var object1 = new MyObject(someparameter);
var object2 = new MyObject(someotherparameter);
Assert.AreNotSame(object1, object2);
Assert.AreEqual(object1, object2); // See following
Но только если вы переопределили метод Equals()
объекта таким образом, что он оценивается какправда.Вы должны определить равенство для своих собственных объектов.
С другой стороны, это не удается
var object1 = new object();
var object2 = new object();
Assert.AreNotSame(object1, object2);
Assert.AreEqual(object1, object2); // Fails!
Ошибка заключается в том, что object
равенство определено в .NET кактот же объект.Они ведут себя по-разному только для классов, в которых равенство определено по-разному.Это верно, является ли тип типом .NET или вашим собственным.
Оператор ==
в object
дает равенство объектов (тот же объект).Он также работает по-разному только для типов, для которых он был определен по-разному.Для ваших собственных типов вы должны будете определить их самостоятельно, если хотите, чтобы они работали.
Кстати, ваш вопрос действительно не имеет ничего общего с NUnit как таковым.NUnit в основном пытается имитировать то, что .NET Framework делает для равенства, хотя он добавляет несколько «дополнений», таких как разрешение ints быть равным double при использовании assert.