Как найти все методы тестирования (кодированный пользовательский интерфейс) динамически?

У меня есть несколько тестовых проектов, написанных на 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

Поэтому, если я удалю следующие утверждения, результат будет таким же.

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

Таким образом, мой вопрос после нахождения всех имен методов, как можно отфильтровать результат и получить только тестовый метод, в этом примере он должен печатать только "CodedUITestMethod3"?

2 ответа

Решение

Следующий код работает на моей коробке,

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: [имя файла] Выводит список обнаруженных тестов из данного тестового контейнера.

Другие вопросы по тегам