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() };
}