正在使用反射读取测试方法内部的Category属性

本文关键字:内部 Category 属性 测试方法 读取 反射 | 更新日期: 2023-09-27 18:01:00

我正试图通过使用反射读取.dll来使用TestMethod自定义属性的category属性添加测试方法,类似于以下内容:

如果测试方法是:

[TestMethod, Category("xyz"), Category("abc")]
public void VerifySomething()
{
   //some code
}

我正在使用反射读取.dll,如下所示:

 Assembly _assembly = Assembly.LoadFile(AssembleyPath);
            Type[] types = _assembly.GetExportedTypes();
            foreach (Type type in types)
            {
                Attribute _classAttribute = type.GetCustomAttribute(typeof(TestClassAttribute));
                if (_classAttribute != null)
                {
                    TreeNode _n = new TreeNode();
                    _n.Text = type.Name;
                    if (type.Name.ToLower().Contains("testbase"))
                        // For exculding test base class from tree node list
                        continue;
                    MemberInfo[] members =
                        type.GetMembers(BindingFlags.Public | BindingFlags.Instance | BindingFlags.InvokeMethod);
                    foreach (MemberInfo member in members)
                    {
                            Attribute _att = member.GetCustomAttribute(typeof(TestMethodAttribute));
                            if (_att != null)
                            {
                                TestMethod _t = new TestMethod(member.Name);
                            }
                    }
                 }
            }

使用此功能,我无法在树视图节点中添加按特定类别筛选的测试方法。基本上,我只想从dll中读取TestCategoryAttribute,根据我上面提到的例子,它的值类似于"xyz"或"abc",然后基于过滤器(TestCategoryAattribute(值,我想从dll加载方法,并将它们添加到树视图节点。有人能告诉我怎样才能做到这一点吗。

正在使用反射读取测试方法内部的Category属性

这是如何从反射中获得TestMethod作为MethodInfo

var _t= typeof(testClass).GetMethod(methodName); // testClass should be the type in your foreach

给定一个TestMethod _t(假设在此之前一切都是正确的(,您可以使用以下获得类别

var testCategories = IEnumerable<TestCategoryAttribute>)_t.GetCustomAttributes(typeof(TestCategoryAttribute), true));

如何根据某些条件对其进行筛选?林克能做到吗?

    if testCategories.Any(c => c == "xyz" || c == "abc") )
    {
        // then add to the treeview node, etc...