我有几个用C#编写的测试项目。我需要创建一个新的应用程序(可以是控制台或WPF应用程序),它需要引用测试项目并动态地找到所有测试方法名称。
到目前为止,我能够找到所有测试项目中的所有方法和属性名称,但是我无法仅过滤掉测试方法名称。我正在跳过能够使用TestMethodAttribute过滤掉测试方法,因为所有测试方法都有[TestMethod]属性。但是它没有正确完成工作。这是代码的提取
MethodInfo[] methodInfos = typeof(CodedUITest2).GetMethods();
Array.Sort(methodInfos,
delegate(MethodInfo methodInfo1, MethodInfo methodInfo2)
{return methodInfo1.Name.CompareTo(methodInfo2.Name);});
foreach (MethodInfo mi in methodInfos)
{
object[] al = mi.GetCustomAttributes(typeof(Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute), false);
if (al != null)
Console.WriteLine(mi.Name);
}
该程序的输出是 CodedUITestMethod3 等于 get_TestContext GetHashCode的 的GetType set_TestContext 的ToString
因此,如果我删除以下语句,结果是相同的。
object [] al = mi.GetCustomAttributes(typeof(Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute),false); if(al!= null)
所以我的问题是在找到所有方法名称之后,如何过滤结果并获得只有测试方法,在这个例子中,它应该只打印“CodedUITestMethod3”?
答案 0 :(得分:1)
以下代码适用于我的复选框
Type type = typeof(CodedUITest2);
IEnumerable<MethodInfo> testMethods = type.GetMethods(BindingFlags.Instance | BindingFlags.Public).Where(m => m.IsDefined(typeof(TestMethodAttribute)));
答案 1 :(得分:0)
在MSDN网站上,我发现了对VSTest.Console.exe命令行选项的以下部分的引用。也许这会有所帮助?
http://msdn.microsoft.com/en-us/library/jj155796.aspx
/ ListTests:[文件名] 列出从给定测试容器中发现的测试。