能否在xUnit中向理论中添加内联C#对象?[重复]

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

我有一些自定义的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)
{
  //...
}

但我得到的抱怨是,这些对象 不是编译时常数.

有什么其他的方法吗?

c# unit-testing xunit
1个回答
1
投票

你可以使用 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)   
{    
}
© www.soinside.com 2019 - 2024. All rights reserved.