MSTest, MyClassInitialize и переменные экземпляра

Интересно, как лучше всего инициализировать переменные экземпляра в тестовом классе в 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
    }
}
12
задан meyousikmann 14 March 2012 в 19:47
поделиться