我每次尝试使用不同的值运行一些测试。例如:我有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();
}
如何归档?
答案 0 :(得分:3)
假设这样的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);
}
}
类初始化方法似乎不起作用。我不确定这是否符合设计要求。
答案 1 :(得分:1)
VS单元测试框架不支持类初始化级别的数据驱动测试。唯一的选择是在TestMethod级别使用它。我希望他们将此添加到下一个版本。