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

The*_*lis 1 c# unit-testing xunit

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

我尝试了这个问题的答案,但没有成功,因为我的对象不是字符串,因此不能创建为编译时常量(属性参数必须是属性参数类型的常量表达式、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)
{
  //...
}
Run Code Online (Sandbox Code Playgroud)

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

有什么替代方案吗?

Pav*_*ski 5

您可以MemberData为此使用属性。它应该返回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)   
{    
}
Run Code Online (Sandbox Code Playgroud)