【发布时间】:2015-10-22 14:45:48
【问题描述】:
xunit.net 支持并行测试执行。
我的测试是参数化的(理论)。我针对不同存储运行的每个测试。这是一个例子:
public class TestCase1
{
[Theory]
[InlineData("mssql")]
[InlineData("oracle")]
[InlineData("pgsql")]
[InlineData("sqlite")]
public void DoTests(string storage) {}
}
public class TestCase2
{
[Theory]
[InlineData("mssql")]
[InlineData("oracle")]
[InlineData("pgsql")]
[InlineData("sqlite")]
public void DoTests(string storage) {}
}
默认情况下,所有测试都执行in parallel。通过它们可以在集合中分组(借助Collection 属性)。
我无法并行运行所有测试,因为每个测试用例都有自己的数据库架构。所以我把所有的测试都放到了一个集合中,集合级属性:
[assembly: CollectionBehavior(CollectionBehavior.CollectionPerAssembly)]
但这也意味着不同存储的测试也是连续运行的。
我想要的是并行运行不同存储的测试,但串行运行单个存储的测试:
=> TestCase1.DoTest("mssql") => TestCase2.DoTest("mssql")
=> TestCase1.DoTest("oracle") => TestCase2.DoTest("oracle")
等等
在 xunit.net 中可以吗?
更新: (把它放在这里,因为 SO 不支持 cmets 中的代码)。 正如@BradWilson 建议的那样,可以使用派生类拆分测试:
public class TestCase1
{
public void DoTests(string storage) {}
}
public class TestCase1_MSSQL
{
[Fact]
public void DoTests(string storage)
{
DoTests("mssql");
}
}
public class TestCase1_Oracle
{
[Fact]
public void DoTests(string storage)
{
DoTests("oracle");
}
}
【问题讨论】:
标签: .net unit-testing xunit.net