是否可以将内联 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)
{
}
我有一些自定义 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)
{
}