我有一个项目,我们在不同的DLL中有不同类型的单元测试。我想知道整个解决方案中的单元测试总数,以及使用一些VB / C#代码的测试类别,所有者名称等。
实际上,我需要每天准备报告,在那里我需要显示有多少单元测试由谁和哪个类别编写
我不想打开Visual Studio来了解这一点。
这是其中一个单元测试的示例签名:
<TestMethod()> <Owner("OwnerName"), TestCategory("Category22")>
Public Sub TestName()
............
............
End Sub
答案 0 :(得分:0)
由于使用.Net Framework属性记录了测试方法,因此您可以使用反射来获取所需的信息。在VB.net中,您可以按照以下方式执行此操作。
'Imports System.Reflection
'Imports TestLibrary <- wherever the attributes are defined
Dim assy As Assembly = Assembly.LoadFrom(filename)
Dim owner As OwnerAttribute
Dim category As TestCategoryAttribute
For Each t As Type In assy.GetTypes()
For Each mi As MethodInfo In t.GetMethods(BindingFlags.Public Or BindingFlags.Instance)
If Not mi.GetCustomAttributes(GetType(TestMethodAttribute)).Count() = 0 Then
owner = mi.GetCustomAttribute(Of OwnerAttribute)()
category = mi.GetCustomAttribute(Of TestCategoryAttribute)()
System.Diagnostics.Debug.Print("{0} : Owner='{1}' Category='{2}'",
mi.Name, owner.OwnerName, category.CategoryName)
End If
Next
Next
您必须添加测试框架DLL作为项目的引用。 filename
是已编译程序集的完整路径(EXE,DLL等)。由于空间原因,我没有包含错误检查。
如果您的测试方法不公开,或者它是静态的,您可以通过分别将绑定标志更改为BindingFlags.NonPublic
或BindingFlags.Static
来获取它。 (documentation提供了更多信息。)
请注意,此方法也适用于C#
Assembly assy = Assembly.LoadFrom(filename);
OwnerAttribute owner = null;
TestCategoryAttribute category = null;
foreach(Type t in assy.GetTypes())
{
foreach (MethodInfo mi in t.GetMethods(BindingFlags.Public | BindingFlags.Instance))
{
if (mi.GetCustomAttributes(typeof(TestMethodAttribute)).Count() != 0)
{
owner = mi.GetCustomAttribute<OwnerAttribute>();
category = mi.GetCustomAttribute<TestCategoryAttribute>();
System.Diagnostics.Debug.Print("{0} : Owner='{1}' Category='{2}'",
mi.Name, owner.OwnerName, category.CategoryName);
}
}
}