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