C# 分类初始化不';尝试运行按类分组的测试用例时,无法执行
我有两个TestClass,每个TestClass都有几个TestMethods。同样,我需要为每个TestMethods创建数据,所有这些数据都在一个SuiteBase文件中处理,该文件由每个TestClass继承。我需要为每个TestClass创建一次数据,以便该类中的所有TestMethods都可以使用相同的数据。因此,我将数据创建代码放在SuiteBase文件的ClassInitialize下。 SuiteBase的结构: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 {
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的定义,它们都是密封类,不能继承。但对我来说,测试是有效的。现在我很困惑!!