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

Используются ли TestContext.Properties?

Использование Visual Studio генерирует класс Test Unit. Затем прокомментируйте метод инициализации класса. Внутри это добавляет ваше свойство, используя аргумент testContext.

При запуске тестового приложения этот метод действительно вызван инфраструктурой тестирования.

//Use ClassInitialize to run code before running the first test in the class
[ClassInitialize()]
public static void MyClassInitialize(TestContext testContext)
{
    /*
     * Any user defined testContext.Properties
     * added here will be erased after this method exits
     */
   testContext.Properties.Add("key", 1 ) ; // place the break point here
}

После выхода из MyClassInitialize все свойства, добавленные пользователем, будут потеряны. Остались только 10 "официальных".

На самом деле TestContext перезаписывается с помощью inital offical, каждый раз перед вызовом каждого метода тестирования. Он не перезаписывается, только если у пользователя есть метод инициализации теста, внесенные в него изменения передаются на тест.

//Use TestInitialize to run code before running each test
[TestInitialize()]public void MyTestInitialize(){ 
     this.TestContext.Properties.Add("this is preserved",1) ;
}

Это эффективно означает, что TestContext.Properties является "главным образом" только для чтения, для пользователей. Это явно не задокументировано в MSDN.

Мне кажется, что это очень грязный дизайн + реализация. Почему у вас есть TestContext.Properties как коллекция? Пользователи могут делать много других решений, чтобы иметь инициализацию класса.

4b9b3361

Ответ 1

TestContext уникален для каждого теста, поэтому его инициализация в ClassInitialize не будет работать. Его следует использовать только для методов TestInitialize, TestCleanup и TestMethod.

В этом сообщении хорошо объясняется, как запускаются тесты из одного класса, включая потоки.

Сказанное, я еще не нашел использования для TestContext, но я новичок в MSTest. Я согласен с тем, что документация MSDN запутанна. Если все методы образца пишут на консоль или выкидывают окно сообщения, ничего не представляет для представления возможностей.

Ответ 2

Я считаю, что вам нужно сохранить копию testContext или она выйдет за рамки.

Я добавил:

private TestContext _tc;

и добавлен в Initialize

tc = testContext;

Когда я смотрю на tc из одного из тестов, он содержит недавно добавленное свойство.

Ответ 3

TestContext используется для передачи информации в ваши тесты извне. Через тестовый исполнитель или файл .runsettings, поэтому его общие данные идут в одну сторону.