Visual Studio - 在Visual Studio中按顺序运行datadriven测试

时间:2017-01-25 08:20:47

标签: c# visual-studio mstest vs-unit-testing-framework

我正致力于在Visual Studio中自动执行某些测试。但是,不同的测试方法依赖于彼此,因此总是需要按顺序执行。除非我使用datadriven testmethods,否则这不是一个大问题。

这是我想要实现的目标:

[DataTestMethod]
[Datarow("Row1")]
[Datarow("Row2")]
public void DoThisFirst(){
//test execution
}

[DataTestMethod]
[Datarow("Row1")]
[Datarow("Row2")]
public void DoThisSecond(){
//test execution
}

我希望测试按以下顺序运行:

  • DoThisFirst - Row1
  • DothisSecond - Row1
  • DoThisFirst - Row2
  • DoThisSecond - Row2

相反,它只是在第一个方法之后运行所有迭代,然后是第二个方法的所有迭代。

我已经注意到这些方法没有出现在有序测试中,因此我使用的是播放列表文件。但是,除了执行方法的顺序之外,似乎没有其他方法可以指定。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

实现目标的一种方法如下。

有一个数据驱动的测试方法调用另外两个。向数据文件添加新列以指定要运行的测试。复制数据文件中的每一行,并将两个测试规范添加到每一行。概括地说,代码是:

[TestMethod]
public void TheTest()
{
    switch ( DataSource["TestToRun"] )
    {
        case "DoThisFirst" : DoThisFirst(); break;
        case "DoThisSecond" : DoThisSecond(); break;
        default: Assert.Fail("Unknown test."); break;
    }
}

测试数据(如CSV)可能是:

TestToRun,UserName,Password,Etc1,Etc2
DoThisFirst,Row1User,Row1Passowrd,Row1Etc1,Row1Etc1
DoThisSecond,Row1User,Row1Passowrd,Row1Etc1,Row1Etc1
DoThisFirst,Row2User,Row2Passowrd,Row2Etc1,Row2Etc1
DoThisSecond,Row2User,Row2Passowrd,Row2Etc1,Row2Etc1

复制数据行很烦人,但如果TheTest被修改为仅调用DoThisFirst()后跟DoThisSecond(),那么如果DoThisFirst()失败,那么DoThisSecond()就不会叫做。但是,鉴于必须按顺序运行两个测试,如果DoThisSecond()失败,则运行DoThisFirst()可能不合理。