Использование наследования в MSTest - PullRequest
17 голосов
/ 28 апреля 2010

Я настраиваю некоторые основанные на 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);
    }

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

Ответы [ 3 ]

8 голосов
/ 14 октября 2011

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

4 голосов
/ 21 октября 2010

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

0 голосов
/ 18 февраля 2016
[TestClass]
public class question_tests : DBTestBase {
...
    [TestCleanup()]
    public void TestCleanup()
    {
        base.MyTestCleanup();
    }
...