IEnumerable 到 TheoryData

问题描述 投票:0回答:1

有没有一种简单的方法将 IEnumerable 转换为 TheoryData?

例如,如果我想传递一组枚举选项,我正在寻找类似的东西:

IEnumerable<TheoryData<MyEnum>> dbEnumOptions
  = Enum.GetValues(typeof(MyEnum))
    .Cast<MyEnum>()
    .ToTheoryData(v => v);

但总的来说,这有助于将流畅的 LINQ 内容导入到 TheoryData 中。目前,我们正在通过仅使用 MemberData 来解决这个问题,但更喜欢 TheoryData 更好的编译时类型检查。

c# .net ienumerable xunit
1个回答
0
投票

可以传递可枚举的理论数据;但是,这涉及使用可重写的 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;
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.