0

我有几个TestClasses,每个TestMethods 都很少。再次,我需要为每个TestMethods 创建数据,所有这些都是SuiteBase 文件中的句柄,每个TestClasses 都继承该文件。我需要为每个 TestClass 创建一次数据,以便该类中的所有 TestMethods 都可以使用相同的数据。为此,我将数据创建代码放在 SuiteBase 文件的 ClassInitialize 下。SuiteBase 的结构:

    public class SuiteBase
{
    [ClassInitialize]
    public void ClassInit()
    {
        //Create the data for the all test cases under one TestClass          
    }

    [TestInitialize]
    public void Init()
    {
        //Starts the app each time for each TestMethod
    }

测试类结构:

    [TestClass()]
public class ScenarioOne :  SuiteBase
{
    [TestMethod()]
    public void TestCase1()
    {
        //Blah Blah
    }

            [TestMethod()]
    public void TestCase2()
    {
        //Blah Blah
    }

            [TestMethod()]
    public void TestCase3()
    {
        //Blah Blah
    }
}

现在我正在尝试从我的测试资源管理器中运行单元测试(按类分组)。 在此处输入图像描述

理论上,在任何 TestMethods 开始之前,SuiteBase 中的 ClassInitialize 代码应该首先工作。但我看到 ClassInitialize 代码不只是运行。我在ClassInitialize中放了一个断点并调试,代码根本没有执行。我对 ClassInitialize 的行为的假设是错误的,还是我在这里做一些根本错误的事情?

4

1 回答 1

4

不幸的是 ClassInitializeAttribute 方法不能被继承。由于 ClassInitializeAttribute 不能被继承,当 ScenarioOne 类被初始化时,SuiteBase 类的 ClassInitialize 方法不能被调用。

尝试解决它,您将不得不在 ScenarioOne 中再次定义 ClassInitialize 方法,并且只需调用基本方法而不是复制代码。

[TestClass()]
public class ScenarioOne : SuiteBase
{
    [ClassInitialize]
    public static void ClassInit()
    {
        SuiteBase.ClassInit();
        //Create the data for the all test cases under one TestClass          
    }
    [TestMethod()]
    public void TestCase1()
    {
        //Blah Blah
    }

    [TestMethod()]
    public void TestCase2()
    {
        //Blah Blah
    }

    [TestMethod()]
    public void TestCase3()
    {
        //Blah Blah
    }
}

希望这可以帮助

于 2018-01-30T20:09:37.800 回答