В NUnit 2.6 возможно ли иметь два объекта, таких как Assert.AreEqual и Assert.AreNotSame ОБА ИСТИНА? - PullRequest
0 голосов
/ 20 февраля 2019

Для всех:

Я пытаюсь написать короткое приложение на C #, в котором я пытаюсь запустить два оператора NUnit Assert, для которых я хочу, чтобы ОБА была истинной:

Утверждение.AreEqual (объект1, объект1);Assert.AreNotSame (object1, object2);

Кажется возможным, но мне не повезло, что это конкретное обстоятельство произошло.Я хочу создать два объекта (объект1, объект2 выше), которые должны оценивать true при использовании .Equals (), но должны оценивать false при использовании оператора "==".

Может ли NUnit сделать это?

Спасибо!

1 Ответ

0 голосов
/ 20 февраля 2019

Условно да к первому вопросу и названию.Нет до последнего оператор ==!

Это работает

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.

...