我正试图通过使用反射读取.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加载方法,并将它们添加到树视图节点。有人能告诉我怎样才能做到这一点吗。
这是如何从反射中获得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...