ClassInitialize上的数据驱动单元测试
本文关键字:单元测试 数据驱动 ClassInitialize | 更新日期: 2023-09-27 18:17:14
我试图每次用不同的值运行一些测试。例如:我有3种方法:methodA
、methodB
、methodC
。我想用不同的索引位置运行每个方法两次。我有TestInitialize
和ClassInitialize
方法。
-
我尝试使用
ClassInitialize
,但我没有成功;我得到编译时错误,因为我的测试上下文不是静态的。public TestContext TestContext { get { return testContextInstance; } set { testContextInstance = value; } } [DeploymentItem("UI.Framework.IntegrationTests''ExpectedValues.xml")] [DataSource("Microsoft.VisualStudio.TestTools.DataSource.XML", "|DataDirectory|''ExpectedValues.xml", "searchTerm2", DataAccessMethod.Sequential)] [ClassInitialize()] publicstaticvoid ClassInitialize(TestContext context) { string indexPath = TestContext.DataRow[0].ToString(); bool isSuccess1 = SearchApiTestsHelper.InitializeSearchEngine(indexPath, null); Assert.IsTrue(isSuccess1); }
-
我尝试使用
TestInitialize
,但数据行没有被加载,它是null
。[DataSource("Microsoft.VisualStudio.TestTools.DataSource.XML", "|DataDirectory|''ExpectedValues.xml", "indices", DataAccessMethod.Sequential), TestInitialize()] public void MyTestInitialize() { string indexPath = TestContext.DataRow[0].ToString(); bool isSuccess1 = SearchApiTestsHelper.InitializeSearchEngine(indexPath, null); Assert.IsTrue(isSuccess1); }
-
我知道我可以设置每个方法运行两次,但是,有些方法需要不同的数据进行验证。例如,
method2
仍然需要为每个索引位置运行两次,并且每次运行都要从数据源中断言一组期望的值。[DeploymentItem("UI.Framework.IntegrationTests''ExpectedValues.xml")] [DataSource("Microsoft.VisualStudio.TestTools.DataSource.XML", "|DataDirectory|''ExpectedValues.xml", "pb1", DataAccessMethod.Sequential), TestCategory("Integration")] [TestMethod] public void PhraseBoosting() { expectedVal = TestContext.DataRow[0].ToString(); }
如何存档?
假设XML文件如下:
<Values>
<searchTerm2>this is search term 2</searchTerm2>
<indices>these are the indices</indices>
<pb1>personal best?</pb1>
</Values>
你可以像这样访问这些值:
[TestClass]
public class UnitTest1
{
public TestContext TestContext
{
get;
set;
}
//[DataSource("Microsoft.VisualStudio.TestTools.DataSource.XML", "|DataDirectory|''ExpectedValues.xml", "Values", DataAccessMethod.Sequential)]
//[ClassInitialize]
//public static void ClassInitialize(TestContext testContext)
//{
// string indexPath = testContext.DataRow["searchTerm2"].ToString();
// Console.WriteLine(indexPath);
//}
[DataSource("Microsoft.VisualStudio.TestTools.DataSource.XML", "|DataDirectory|''ExpectedValues.xml", "Values", DataAccessMethod.Sequential)]
[TestInitialize]
public void TestInitialize()
{
string indexPath = TestContext.DataRow["indices"].ToString();
Console.WriteLine(indexPath);
}
[DataSource("Microsoft.VisualStudio.TestTools.DataSource.XML", "|DataDirectory|''ExpectedValues.xml", "Values", DataAccessMethod.Sequential)]
[TestMethod]
public void TestMethod1()
{
string indexPath = TestContext.DataRow["pb1"].ToString();
Console.WriteLine(indexPath);
}
}
类初始化方法似乎不起作用。我不确定这是不是故意的
类初始化级别的数据驱动测试在VS单元测试框架中是不支持的。唯一的选择是在TestMethod级别使用它。