XUnit.net:运行 并行理论

XUnit.net: run Theories in parallel

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 不支持注释中的代码)。 正如@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");
    }
}

我不会用理论和内联数据来做这件事;相反,我会为每个存储方法使用抽象基础 class 和具体测试 classes。这让你得到你想要的分组。