在XUnit测试中使用反射加载MemberData

时间:2019-06-10 14:05:08

标签: .net .net-core xunit system.reflection

方案::我有两个枚举,一个称为Area,另一个称为Permission,它们用于设置操作授权。我遍历它们,最后得到名称结构类似于AreaPermission的策略。然后,我有一个充满字符串常量的单独类,该类在控制器[Authorize(Policy = MyClass.PolicyName)]

的auth属性中使用

所需的结果:我想要一个单元测试,该单元测试将遍历常量类上的所有属性,并调用获取用于授权策略DI服务注册的所有策略名称的方法。这样,将来,如果开发人员添加了权限值或区域值,那么如果尚未创建字符串常量,则将进行单元测试。

当前结果:我目前没有数据结果:

System.InvalidOperationException : No data found for OperationPoliciesTest.PoliciesExistInRegistrationMethod
  Exception doesn't have a stacktrace

TestData类:

public class OperationalPoliciesTestData  : IEnumerable<object[]>
    {
        public IEnumerator<object[]> GetEnumerator()
        {
            var t = typeof(OperationPolicies);
            var props = t.GetProperties();

            foreach (var prop in props)
            {
                yield return new object[] {prop.Name};
            }
        }

        IEnumerator IEnumerable.GetEnumerator()
        {
            return GetEnumerator();
        }
    }

测试类:

public class OperationPoliciesTest
    {
        private readonly List<string> _registeredPolicies;

        public OperationPoliciesTest()
        {
            var policies =
                OperationalRequirementRegister.GetAllOperationalPolicyNames();

            _registeredPolicies = new List<string>(policies.Keys);
        }


        [Theory]
        [ClassData(typeof(OperationalPoliciesTestData))]
        public void PoliciesExistInRegistrationMethod(string policyName)
        {
            Assert.NotEmpty(_registeredPolicies);
            Assert.NotNull(policyName);
            Assert.Contains(policyName, _registeredPolicies);
        }
    }

关于我是否缺少某些东西的建议吗?

0 个答案:

没有答案