我有几个TestClasses,每个TestClasses都有很少的TestMethods.Again我需要为每个TestMethods创建数据,所有这些都是SuiteBase文件中的句柄,每个TestClass都继承这些句柄。我需要为每个TestClass创建一次数据,以便该类中的所有TestMethod都可以使用相同的数据。出于这个原因,我已将数据创建代码放在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
}
}
现在我正在尝试从我的测试资源管理器中运行单元测试(按类分组)。
理论上,在任何TestMethods开始之前,SuiteBase中的ClassInitialize代码应首先工作。但我发现ClassInitialize代码不仅仅是运行。我在ClassInitialize中设置了一个断点并进行了调试,代码根本没有执行。 在ClassInitialize的行为中我的假设是错误的还是我在这里做了一些根本错误的事情?
答案 0 :(得分:3)
不幸的是,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
}
}
希望这有帮助