有没有一种简单的方法将 IEnumerable 转换为 TheoryData?
例如,如果我想传递一组枚举选项,我正在寻找类似的东西:
IEnumerable<TheoryData<MyEnum>> dbEnumOptions
= Enum.GetValues(typeof(MyEnum))
.Cast<MyEnum>()
.ToTheoryData(v => v);
但总的来说,这有助于将流畅的 LINQ 内容导入到 TheoryData 中。目前,我们正在通过仅使用 MemberData 来解决这个问题,但更喜欢 TheoryData 更好的编译时类型检查。
可以传递可枚举的理论数据;但是,这涉及使用可重写的 GetData 方法的声明来设置 classAttribute。
public class ClassAutoMoqDataAttribute : CompositeDataAttribute
{
public ClassAutoMoqDataAttribute(Type className)
: base(new ClassDataAttribute(className), new AutoMoqDataAttribute())
{
}
public override IEnumerable<object[]> GetData(MethodInfo testMethod)
{
if (testMethod == null)
{
throw new ArgumentNullException(nameof(testMethod));
}
var theoryAttribute = Attributes.FirstOrDefault();
var data = theoryAttribute.GetData(testMethod);
var autoDataAttribute = Attributes.ElementAt(1);
if (autoDataAttribute == null)
{
yield break;
}
foreach (var datum in data)
{
var autoData = autoDataAttribute.GetData(testMethod).ToArray()[0];
for (var i = 0; i < datum.Length; i++)
{
autoData[i] = datum[i];
}
yield return autoData;
}
}
}