在MSTest中使用继承

oil*_*lio 17 unit-testing mstest visual-studio-2010

我正在设置一些基于MSTest的单元测试.为了让我的生活更轻松,我想使用一个基类来处理通用设置和我所有测试所需的taredown.我的基类看起来像这样:

[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() { }
}
Run Code Online (Sandbox Code Playgroud)

我的实际测试类看起来像这样:

[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.");
    }
}
Run Code Online (Sandbox Code Playgroud)

TestInitialize函数按预期工作.但ClassInitialize函数永远不会运行.如果我将以下内容添加到我的子类中,它会运行:

    [ClassInitialize()]
    public static void t(TestContext testContext) {
        MyClassInitialize(testContext);
    }
Run Code Online (Sandbox Code Playgroud)

是否有可能让我的基类初始化函数运行而不在我的子类中引用它?

小智 8

当且仅当相关的"类"包含至少一个TestMethod并且选择了至少一个来自该类的TestMethod来执行时,才执行ClassInitialize方法.


小智 4

确认这对我来说也是一个问题。我在基础上使用了构造函数,并在清理时使用了析构函数

  • 构造函数的问题在于它的工作方式与 TestInitialize 相同。它将在每次测试中运行。 (4认同)