在评估单元测试的属性之后,我遇到了单元测试的 classinitilalize 方法的问题。这些测试使用 [classinitialize] 方法生成测试集,该测试集在 xml 文件中生成随机数据集。xml 文件由具有属性 [datasource] 的单元测试使用。精简版如下所示:
[ClassInitialize]
public static void Initialize(TestContext context)
{
// Create xml output file
var output = new XDocument(new XElement("Rows"));
foreach (var Code in Codes)
{
if (output.Root != null)
output.Root.Add(new XElement("Row", new XElement("Code", Code)));
}
output.Save("TestData.xml");
}
[DataSource("Microsoft.VisualStudio.TestTools.DataSource.XML",
"|DataDirectory|\\TestData.xml",
"Row",
DataAccessMethod.Sequential)]
[TestMethod]
public void TestStuff()
{
var Code = (string)TestContext.DataRow["Code"];
TestItem(Code);
}
我正在使用 Visual Studio 2012 Update 3。我使用了 Sysinternals 工具 Process Monitor 来验证执行顺序。我在每个方法的开头设置了一个断点。然后,我逐步查看了文件访问。我看到的操作顺序。
- vstestexecutionengine 读取的TestData.xml。
- 调用 ClassInitialize 方法并写入 TestData.xml
- 使用步骤 1 中读取的数据执行 TestMethod。(我添加了一个包含虚假数据的文件进行测试)
所以我的问题是,在读取 xml 文件之前 classinitialize 没有执行,我做错了什么?或者我想做的事情是不可能的?