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。这让你得到你想要的分组。
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。这让你得到你想要的分组。