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

Использование наследования в MSTest

Я настраиваю модульные тесты на основе MSTest. Чтобы облегчить мою жизнь, я хочу использовать базовый класс, который обрабатывает общую установку и все мои тесты требуют. Мой базовый класс выглядит следующим образом:

[TestClass]
public class DBTestBase {
    public TestContext TestContext { get; set; }

    [ClassInitialize()]
    public static void MyClassInitialize(TestContext testContext) {
        var config = new XmlConfigurationSource("ARconfig_test.xml");
        ActiveRecordStarter.Initialize(Assembly.Load("LocalModels"), config);
    }

    [TestInitialize()]
    public void MyTestInitialize() {
        ActiveRecordStarter.CreateSchema();
        Before_each_test();
    }

    protected virtual void Before_each_test() { }

    [TestCleanup()]
    public void MyTestCleanup() {
        After_each_test();
    }

    protected virtual void After_each_test() { }
}

Мой фактический класс тестов выглядит следующим образом:

[TestClass]
public class question_tests : DBTestBase {

    private void CreateInitialData() {
        var question = new Question()
                           {
                               Name = "Test Question",
                               Description = "This is a simple test question"
                           };
        question.Create();
    }

    protected override void Before_each_test() {
        base.Before_each_test();
        CreateInitialData();
    }

    [TestMethod]
    public void test_fetching() {
        var q = Question.FindAll();
        Assert.AreEqual("Test Question", q[0].Name, "Incorrect name.");
    }
}

Функция TestInitialize работает так, как ожидалось. Но функция ClassInitialize никогда не запускается. Он запускается, если я добавляю следующее к моему дочернему классу:

    [ClassInitialize()]
    public static void t(TestContext testContext) {
        MyClassInitialize(testContext);
    }

Можно ли запустить функцию инициализации базового класса без ссылки на нее в моем дочернем классе?

4b9b3361

Ответ 1

Подтвердите, что это тоже проблема для меня. Я использовал конструктор на базе и деструктор для очистки

Ответ 2

Метод ClassInitialize выполняется тогда и только тогда, когда соответствующий "класс" содержит по крайней мере один TestMethod, и по крайней мере один TestMethod из класса выбран для выполнения.

Ответ 3

[TestClass]
public class question_tests : DBTestBase {
...
    [TestCleanup()]
    public void TestCleanup()
    {
        base.MyTestCleanup();
    }