我正在尝试使用TestMethod
自定义属性的类别属性添加测试方法,方法是使用反射读取.dll,如下所示:
如果测试方法是:
[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”的值,如我上面提到的示例,然后基于过滤器(TestCategoryAttribute)值,我想从dll加载方法并将它们添加到树视图节点。任何人都可以指导我如何实现这一目标。
答案 0 :(得分:0)
这是从Reflection获取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));
如何根据某些条件过滤它们? Linq Any能做到这一点吗?
if testCategories.Any(c => c == "xyz" || c == "abc") )
{
// then add to the treeview node, etc...