是否可以将内联 C# 对象添加到 xUnit 中的理论中?

Is it possible to add inline C# objects to a theory in xUnit?

我有一些自定义 C# 对象,我想将其作为 InlineData 参数传递到 xUnit 的 Theory 中。

我尝试了 the answer in this question 但没有成功,因为我的对象不是字符串,因此不能创建为编译时常量(属性参数必须是常量表达式、typeof 表达式或数组创建属性参数类型的表达式).

这是我试过的,

private static readonly Card sevenOfHearts = Card.SevenOfHearts;
private static readonly Card sevenOfSpades = Card.SevenOfSpades;
private static readonly Card sevenOfDiamonds = Card.SevenOfDiamonds;
private static readonly Card sevenOfClubs = Card.SevenOfClubs;

[Theory]
[InlineData(sevenOfHearts)]
[InlineData(sevenOfSpades)]
[InlineData(sevenOfDiamonds)]
[InlineData(sevenOfClubs)]
void Test(
  Card card)
{
  //...
}

但我收到抱怨说那些对象不是编译时间常量

有什么替代方案吗?

您可以为此使用 MemberData 属性。它应该 return IEnumerable<object[]>,其中每个项目代表您的测试方法的一组参数(在您的情况下只有一个 Card 参数,因此只有一个项目)

public static IEnumerable<object[]> Cards
{
    get
    {
        yield return new object[] { Card.SevenOfHearts };
        yield return new object[] { Card.SevenOfSpades };
        yield return new object[] { Card.SevenOfDiamonds };
        yield return new object[] { Card.SevenOfClubs };
    }
}

[Theory]
[MemberData(nameof(Cards))]
void Test(Card card)   
{    
}