gpt4 book ai didi

c# - 在读取测试方法数据之前强制执行 ClassInitialize

转载 作者:行者123 更新时间:2023-11-30 18:46:37 24 4
gpt4 key购买 nike

我在单元测试的属性评估后执行单元测试的 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 来验证执行顺序。我在每个方法的开头设置了一个断点。然后我逐步查看文件访问。我看到的操作顺序。

  1. 由 vstestexecutionengine 读取的 TestData.xml。
  2. 调用ClassInitialize方法并写入TestData.xml
  3. 使用步骤 1 中读取的数据执行 TestMethod。(我添加了一个包含虚假数据的文件进行测试)

所以我的问题是,在读取 xml 文件之前没有执行 classinitialize 是我做错了什么?或者我想做的事情是不可能的?

最佳答案

MSTestHacks可能是您的解决方法。

它允许将测试类中的 IEnumberable 用作 TestMethodDataSource。您可以在此属性中返回作为 Codes 的内容。

来自网站:

运行时数据源

你必须从 TestBase 继承你的测试类

[TestClass]
public class UnitTest1 : TestBase
{ }

创建返回 IEnumerable 的属性、字段或方法

[TestClass]
public class UnitTest1 : TestBase
{
private IEnumerable<int> Stuff
{
get
{
//This could do anything, fetch a dynamic list from anywhere....
return new List<int> { 1, 2, 3 };
}
}
}

DataSource 属性添加到您的测试方法,指向回之前创建的 IEnumerable 名称。这需要完全合格。

[TestMethod]
[DataSource("Namespace.UnitTest1.Stuff")]
public void TestMethod1()
{
var number = this.TestContext.GetRuntimeDataSourceObject<int>();

Assert.IsNotNull(number);
}

关于c# - 在读取测试方法数据之前强制执行 ClassInitialize,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18217226/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com