Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 分类初始化不';尝试运行按类分组的测试用例时,无法执行_C#_Visual Studio_Unit Testing_Test Explorer_Visualstudio.testtools - Fatal编程技术网

C# 分类初始化不';尝试运行按类分组的测试用例时,无法执行

C# 分类初始化不';尝试运行按类分组的测试用例时,无法执行,c#,visual-studio,unit-testing,test-explorer,visualstudio.testtools,C#,Visual Studio,Unit Testing,Test Explorer,Visualstudio.testtools,我有两个TestClass,每个TestClass都有几个TestMethods。同样,我需要为每个TestMethods创建数据,所有这些数据都在一个SuiteBase文件中处理,该文件由每个TestClass继承。我需要为每个TestClass创建一次数据,以便该类中的所有TestMethods都可以使用相同的数据。因此,我将数据创建代码放在SuiteBase文件的ClassInitialize下。 SuiteBase的结构: public class SuiteBase {

我有两个TestClass,每个TestClass都有几个TestMethods。同样,我需要为每个TestMethods创建数据,所有这些数据都在一个SuiteBase文件中处理,该文件由每个TestClass继承。我需要为每个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结构:

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

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

            [TestMethod()]
    public void TestCase3()
    {
        //Blah Blah
    }
}
现在,我正试图从测试资源管理器中运行单元测试(按类分组)。

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

不幸的是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
    }
}

希望这有帮助

不幸的是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
    }
}

希望这有帮助

[ClassInitialize]
也只对静态方法有效吗?感谢info@RajN。我想我要么按照你的方式去做,要么就调用SuiteBase构造函数中所有必需的方法。您还可以告诉我在哪里可以获得有关VS单元测试属性(如TestClass和TestMethods)的所有信息吗?MSDN是一个很好的源代码。这里的链接可能会有所帮助@RajN我刚刚在MSDN中介绍了ClassInitialize和TestInitialize的定义,它们都是密封类,不能继承。但对我来说,测试是有效的。现在我很困惑!!
[ClassInitialize]
是否只对静态方法起作用?感谢@RajN提供的信息。我想我要么按照你的方式去做,要么就调用SuiteBase构造函数中所有必需的方法。您还可以告诉我在哪里可以获得有关VS单元测试属性(如TestClass和TestMethods)的所有信息吗?MSDN是一个很好的源代码。这里的链接可能会有所帮助@RajN我刚刚在MSDN中介绍了ClassInitialize和TestInitialize的定义,它们都是密封类,不能继承。但对我来说,测试是有效的。现在我很困惑!!