1

我有几个用 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 Equals get_TestContext GetHashCode GetType set_TestContext ToString

所以如果我删除以下语句,结果是一样的。

对象[] al = mi.GetCustomAttributes(typeof(Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute), false); 如果 (al != null)

所以我的问题是在找到所有方法名称之后,如何过滤结果并只获取测试方法,在这个例子中,它应该只打印“CodedUITestMethod3”?

4

2 回答 2

1

以下代码适用于我的盒子,

Type type = typeof(CodedUITest2);
IEnumerable<MethodInfo> testMethods = type.GetMethods(BindingFlags.Instance | BindingFlags.Public).Where(m => m.IsDefined(typeof(TestMethodAttribute)));
于 2013-09-05T01:04:02.097 回答
0

在 MSDN 站点上,我找到了对 VSTest.Console.exe 命令行选项的以下部分的引用。也许这会有所帮助?

http://msdn.microsoft.com/en-us/library/jj155796.aspx

/ListTests:[ 文件名 ] 列出从给定测试容器中发现的测试。

于 2013-08-28T12:30:26.383 回答