首页 > 解决方案 > 将多个数组传递给 xUnit

问题描述

我了解如何将一个数组传递给 xUnit:将字符串数组传递给 xunit 测试方法

但是,我想将三个数组传递给我的测试方法:

Type1[] ReturnValuesForMock;
Type2[] ExpectedTestResult;
Type3[] TestData

有没有办法做到这一点?Type1是一个枚举,所以我可以使用一个编译时常量new [] {enum},但这对于Type2需要调用new(). 然后我可以处理Type3as params

我觉得这真的应该是可能的,但我不确定如何......

标签: c#unit-testingxunit

解决方案


我不确定这是否是最好的方法,但我已经确定我可以[ClassData]在我的测试中使用该属性,如下所示:

    [Theory]
    [ClassData(typeof(TestDataGenerator))]
    public void Test1(Type1[] t1, Type2[] t2, Type3[] t3)
    {
        //MyTest
    }

然后通过一个TestDataGenerator类提供数据:

    private class TestDataGenerator:IEnumerable<object[]>
    {
        private static readonly List<object[]> _data = new()
        {
            new object[]{new Type1[] {...}, new Type2[]{...)}, new Type3[]{...}},
        ...
        };

        public IEnumerator<object[]> GetEnumerator() => _data.GetEnumerator();
        IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
    }

推荐阅读