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