【问题标题】:XUnit.net: run Theories in parallelXUnit.net:并行运行理论
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

    • 好的,有道理。但是我必须为所有存储重复所有方法(调用 base)(请参阅问题中的更新)。这有点麻烦......但应该可以,谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-13
    • 1970-01-01
    • 1970-01-01
    • 2016-07-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多