我有一些自定义的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)
{
//...
}
但我得到的抱怨是,这些对象 不是编译时常数.
有什么其他的方法吗?
你可以使用 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)
{
}