我有几个用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);
}
程序的输出为编码的UI测试方法3Equals获取测试上下文方法GetTypeset_TestContextToString
因此,如果我删除以下语句,结果是一样的。
object[]al=mi.GetCustomAttributes(typeof(Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute),false);如果(al!=空)
所以我的问题是,在找到所有方法名称后,如何过滤结果并只获得测试方法,在这个例子中,它应该只打印"CodedUITestMethod3"?
以下代码适用于我的盒子
Type type = typeof(CodedUITest2);
IEnumerable<MethodInfo> testMethods = type.GetMethods(BindingFlags.Instance | BindingFlags.Public).Where(m => m.IsDefined(typeof(TestMethodAttribute)));
在MSDN站点上,我发现了对VSTest.Console.exe命令行选项的以下部分的引用。也许这会有所帮助?
http://msdn.microsoft.com/en-us/library/jj155796.aspx
/ListTests:[文件名]列出给定测试容器中发现的测试。