Assert.ReferenceEquals() передает, где Object.ReferenceEquals() возвращает значение «false» в тесте Visual StudioC#

Место общения программистов C#
Anonymous
Assert.ReferenceEquals() передает, где Object.ReferenceEquals() возвращает значение «false» в тесте Visual Studio

Сообщение Anonymous »

При попытке создать начальный неудачный модульный тест в тестовых возможностях Visual Studio Professonal 2008 я не могу заставить Assert.ReferenceEquals() корректно завершиться неудачей, когда экземпляр объекта не равен нулевой ссылке. Обратите внимание, что object.ReferenceEquals() правильно возвращает false для этого же сравнения.

Вот код моего класса:

Код: Выделить всё

public static class Project
{
public static object TheObject { get; set; }

public static void Startup(object theObject)
{
// ToDo: Project.Startup(): Test.
// ToDo: Project.Startup(): Implement.
}
}
И вот ключевые аспекты моего тестового класса:

Код: Выделить всё

[TestClass()]
public class ProjectTest
{
[TestMethod()]
public void StartupTest()
{
object obj = "hello";
Project.Startup(obj);
Assert.ReferenceEquals(obj, Project.TheObject); // Test Passes!?!
}
}
Обратите внимание, что метод static void Startup(object) пуст, поэтому свойство TheObject статического объекта никогда не устанавливается и остается нулевым. Итак, очевидно, что Assert.ReferenceEquals(obj, Project.TheObject) должен завершиться неудачей, но каким-то образом этот тест проходит.

Обратите внимание, что изменение

Код: Выделить всё

Assert.ReferenceEquals(obj, Project.TheObject)


в

Код: Выделить всё

Assert.IsTrue(object.ReferenceEquals(obj, Project.TheObject))


приводит к тому, что этот тест правильно завершается неудачей.

Это кажется слишком простым, но я не могу понять, что здесь не так. Если кто-то сможет указать на мою ошибку, я буду очень признателен.

Заранее спасибо,

Майк

Обновление Ответ Джеймса Эйвери:

Ах, как глупо я себя сейчас чувствую. Я знал, что это должно быть что-то вроде этого. Ух ты.

Конечно, «GoToDefinition» приводит меня к «Object.ReferenceEquals()». Таким образом, ввод «Assert.ReferenceEquals()» на самом деле является System.Object.ReferenceEquals(), который в моем случае спокойно возвращал «false». Это, конечно, не имеет ничего общего с фактическим провалом утверждения, поэтому тест проходит. Удивительный.

Спасибо, Джеймс.

Вернуться в «C#»