При попытке создать начальную, неудачную 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". Это, конечно же, не имеет никакого отношения к тому, что на самом деле не выполняется утверждение, поэтому тест проходит. Удивительно.
Спасибо Джеймсу.