How to find all test methods (coded UI) dynamically?

944 views Asked by At

I have several test projects written in C#. I need to create a new application (can be a console or WPF application) which needs to refer to the test projects and found out all test methods names dynamically.

So far I was able to find out all methods and properties names in all test projects, but I'm not able to filter out only the test methods names. I was hopping to be able to filter out the test methods by using TestMethodAttribute, because all test methods have [TestMethod] attribute. However it doesn't do the job correctly. Here is an extraction of the code

        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);

        }

The output of the program is CodedUITestMethod3 Equals get_TestContext GetHashCode GetType set_TestContext ToString

So if I delete the following statements, the result is the same.

object[] al = mi.GetCustomAttributes(typeof(Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute), false); if (al != null)

So my question is after finding all methods names, how it is possible to filter the result and get only test method, in this example, it should print only "CodedUITestMethod3"?

2

There are 2 answers

0
cli On BEST ANSWER

The following code works on my box,

Type type = typeof(CodedUITest2);
IEnumerable<MethodInfo> testMethods = type.GetMethods(BindingFlags.Instance | BindingFlags.Public).Where(m => m.IsDefined(typeof(TestMethodAttribute)));
0
yonitdm On

On the MSDN site I found reference to the following part of VSTest.Console.exe Command-Line Options. Maybe this would help?

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

/ListTests:[ file name ] Lists discovered tests from the given test container.