Какое отношение имеет имя TestContext в данном коде? - PullRequest
0 голосов
/ 24 мая 2018

Я использую MicrosoftTestTools.У меня есть класс A, содержащий [TestMethod] и [ClassInitialize].

[ClassInitialize]
public static void ClassInitialize(TestContext context)
{
    Setup(context);
}

Определение для установки присутствует в классе B (базовый класс класса A).

   public static void Setup(TestContext context)
    {
something
    }

[TestCleanUp] присутствует в классе B.

[TestCleanup]
public void TestCleanUp()
{    
        if (TestContext.CurrentTestOutcome == UnitTestOutcome.Failed){}

}

Чтобы получить TestContext в методе TestCleanUp, я создал свойство, как показано ниже в классе B.

public TestContext TestContext { get; set; }

Это работало нормально.Но когда я изменил объявление следующим образом:

public `TestContext CurrentContext{ get; set; }`

Итак, функция вроде

[TestCleanup]
public void TestCleanUp()
{ 
if (CurrentContext.CurrentTestOutcome == UnitTestOutcome.Failed){}
}

CurrentContext равна нулю.Как здесь работает недвижимость?Это работает только тогда, когда имя TestContext.Я наивен в программировании на C #.

1 Ответ

0 голосов
/ 24 мая 2018

Возможно, вы заметили, что не присваиваете TestContext свойство самостоятельно, но каким-то образом оно получает его значение.Как это получает значение?Тестовый фреймворк назначает его.Как он находит это свойство?Он ищет свойство с именем TestContext типа TestContext.Поэтому, когда вы меняете имя - оно больше не может найти его и не может присвоить значение, поэтому оно остается нулевым.

Подробнее об этом классе можно прочитать в документации .Соответствующая часть этого вопроса:

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

...