Интересно, как лучше всего инициализировать переменные экземпляра в тестовом классе под MSTest.Допустим, у меня есть тестовый класс, в котором много накладных расходов на насмешку и настройку вспомогательных объектов.Я хочу сделать это один раз, вместо того, чтобы повторять один и тот же код в каждом тесте.Я думал о том, чтобы использовать метод MyClassInitialize для инициализации некоторых глобальных переменных экземпляра, к которым имеют доступ все тесты.Таким образом, я инициализирую глобальные переменные экземпляра один раз, и они просто используются каждым тестом при запуске.
К сожалению, метод MyClassInitialize является статическим, поэтому не может инициализировать глобальные переменные экземпляра.Я думал о том, чтобы сделать глобальные переменные экземпляра статичными, но, похоже, это не правильное решение.Затем я подумал о том, чтобы просто поместить код инициализации в конструктор самого тестового класса, но что-то внутри меня продолжает говорить, что MyClassInitialize - это то, что я должен использовать.Другой мыслью было бы использовать MyTestInitialize, поскольку этот метод не является статичным, но это будет создавать объект снова и снова с каждым тестом.Это уместно?
Существуют ли передовые методы использования переменных в тестах, когда эти переменные нужно инициализировать только один раз до запуска тестов?Ниже приведен надуманный пример того, о чем я говорю.
[TestClass()]
public class ProgramTest
{
// this object requires extensive setup so would like to just do it once
private SomeObjectThatIsUsedByAllTestsAndNeedsInitialization myObject;
private TestContext testContextInstance;
[ClassInitialize()]
public static void MyClassInitialize(TestContext testContext)
{
// initializing SomeObjectThatIsUsedByAllTestsAndNeedsInitialization clearly will
// not work here because this method is static.
}
[TestMethod()]
public void Test1()
{
// use SomeObjectThatIsUsedByAllTestsAndNeedsInitialization here
}
[TestMethod()]
public void Test2()
{
// use SomeObjectThatIsUsedByAllTestsAndNeedsInitialization here
}
[TestMethod()]
public void Test3()
{
// use SomeObjectThatIsUsedByAllTestsAndNeedsInitialization here
}
}