C# ClassData属性如何将数据传递给测试方法

C# ClassData属性如何将数据传递给测试方法,c#,asp.net-mvc,xunit.net,C#,Asp.net Mvc,Xunit.net,我很困惑[ClassData]属性是如何工作的,这对我来说太奇怪了,下面是我的代码: // I just include basic code, some code such as explicitly implement GetEnumerator() of IEnumerable and Product class are not included for abbreviation [Serializable] public class ProductTestData : IEnumera

我很困惑
[ClassData]
属性是如何工作的,这对我来说太奇怪了,下面是我的代码:

// I just include basic code, some code such as explicitly implement GetEnumerator() of IEnumerable and Product class are not included for abbreviation

[Serializable]
public class ProductTestData : IEnumerable<object[]>
{
   public IEnumerator<object[]> GetEnumerator()
   {
      yield return new IEnumerable<Product>[] { GetPricesUnder50() };
      yield return new IEnumerable<Product>[] { GetPricesOver50() };
   }

   private IEnumerable<Product> GetPricesUnder50()
   {
      yield return new Product ...//return product's price < 50
   }

   private IEnumerable<Product> GetPricesOver50()
   {
      yield return new Product ...//return product's price > 50
   }
}
由于ClassData仅适用于
IEnumerable
,因此为了更好地理解,让我重新表达ProductTestData,因此ProductTestData可以被视为:

[Serializable]
public class ProductTestData : IEnumerable<IEnumerable<Product>[]>
{
   ...
}
它会产生一个错误:

测试方法要求1个参数值,但提供了2个参数值


Q2-所以我猜ClassData不会在
IEnumerable[]
上再次对每个
进行
foreach
,而是如何处理
IEnumerable[]
并将其传递给测试方法,该方法只需要
Product[]
的参数,该参数与
IEnumerable[]不兼容

建议移动到
memberdata
,除非不在xunit v2上。没有看到任何明显错误的东西-您肯定希望每个测试用例都有一个
收益率
MemberData
ClassData
都不会进行任何有趣的转换,即您需要生成数组作为输出,并且除非在xunit v2上没有,否则不要通过IEnumerablesuggest移动到
MemberData
。没有看到任何明显错误的东西-您明确希望每个测试用例都有
收益率
-无论
MemberData
还是
ClassData
都不会进行任何有趣的转换,即您需要将数组生成为输出,而不是传递IEnumerable
[Serializable]
public class ProductTestData : IEnumerable<IEnumerable<Product>[]>
{
   ...
}
public IEnumerator<object[]> GetEnumerator()
{
   yield return new IEnumerable<Product>[] { GetPricesUnder50(), GetPricesOver50() };
}