Можно ли использовать TestContext.Properties? - PullRequest
18 голосов
/ 25 марта 2010

Использование 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 перезаписывается исходным, каждый раз перед вызовом каждого метода тестирования. Если он не перезаписан, только если у пользователя есть метод инициализации теста, сделанные там изменения передаются в тест.

//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 в качестве коллекции? Пользователи могут использовать множество других решений для инициализации на уровне класса.

Ответы [ 3 ]

13 голосов
/ 07 апреля 2010

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

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

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

1 голос
/ 25 марта 2010

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

Я добавил:

private TestContext _tc;

и добавлено к инициализации

tc = testContext;

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

0 голосов
/ 21 февраля 2017

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...