让xUnit组合参数

问题描述 投票:0回答:1

使用 xUnit 时,可以使用 InlineData 属性使用不同的数据多次运行相同的测试。

  [Theory]
  [InlineData("A", 1)]
  [InlineData("B", 2)]
  public void TestAllValues(string x, int y)

我想将这些参数组合成所有可能的组合。我可以写如下。

  [Theory]
  [InlineData("A", 1)]
  [InlineData("A", 2)]
  [InlineData("A", 3)]
  [InlineData("B", 1)]
  [InlineData("B", 2)]
  [InlineData("B", 3)]
  public void TestAllValues(string x, int y)

就我而言,我需要测试更多的组合,比如说字母表中的每个字母以及从 1 到 100 的每个数字。我喜欢写类似的内容

  [Theory]
  [InlineData("A-Z", 1..100)]
  public void TestAllValues(string x, int y)

或任何不需要 2.600 行的同等内容。这个例子是为了简单起见而编的,但我确实需要很多案例来测试。

作为奖励问题。我可以在测试名称中反映该组合吗?

unit-testing xunit xunit.net
1个回答
10
投票

原来有一个叫做

MemberData
属性的东西。

 [Theory]
 [MemberData(nameof(AllCombinations))]        
 public void TestAllValues(string x, int y)
 {

您可以在其中生成所有所需的组合。

 public static IEnumerable<object[]>AllCombinations{
    get 
    {
        foreach(var c in generateCombinations()){
           yield return new object [] { c.Letter, c.Number}
        }
    }
© www.soinside.com 2019 - 2024. All rights reserved.