如何动态查找所有测试方法(编码的UI)?

时间:2013-08-22 14:55:20

标签: unit-testing attributes coded-ui-tests system.reflection test-project

我有几个用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”?

2 个答案:

答案 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:[文件名] 列出从给定测试容器中发现的测试。