Подтвердить что ты не робот

Assert.ReferenceEquals() Пропускает, где Object.ReferenceEquals() возвращает "false" в тесте Visual Studio

При попытке создать начальную, неудачную unit test в 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) пуст, поэтому свойство static object TheObject никогда не устанавливается и остается null. Итак, ясно, что Assert.ReferenceEquals(obj, Project.TheObject) должен выйти из строя, но как-то этот тест проходит.

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

Assert.ReferenceEquals(obj, Project.TheObject)

к

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

заставляет этот тест правильно выходить из строя.

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

Спасибо заранее,

Mike

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

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

Конечно, "GoToDefinition" возвращает меня в "Object.ReferenceEquals()". Поэтому типизация "Assert.ReferenceEquals()" - это действительно System.Object.ReferenceEquals(), который в моем случае спокойно возвращал "false". Это, конечно же, не имеет никакого отношения к тому, что на самом деле не выполняется утверждение, поэтому тест проходит. Удивительно.

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

4b9b3361

Ответ 1

Метод ReferenceEquals, который вы вызываете, является статическим методом, доступным для всех ссылочных объектов, он не является частью среды тестирования. Если вы посмотрите, это возвращает логическое значение, тогда как нормальное утверждение будет недействительным. Это определенно запутанно,.AreSame() - это утверждение, которое вы ищете.