Получить список тестов в библиотеке nunit программно без необходимости запускать тесты

У меня есть библиотека классов nunit, содержащая тестовые примеры. Я хочу программно получить список всех тестов в библиотеке, в основном имена тестов и их идентификаторы тестов. Вот что у меня есть до сих пор:

var runner = new NUnit.Core.RemoteTestRunner();
runner.Load(new NUnit.Core.TestPackage(Request.PhysicalApplicationPath + "binSystemTest.dll"));
var tests = new List<NUnit.Core.TestResult>();
foreach (NUnit.Core.TestResult result in runner.TestResult.Results)
{
    tests.Add(result);
}

проблема в том, что бегун.TestResult имеет значение null, пока вы не запустите тесты. Я, очевидно, не хочу запускать тесты на данный момент, я просто хочу получить список тестов, которые находятся в библиотеке. После этого, я дам пользователям возможность выбрать тест и запустить его индивидуально, передавая идентификатор теста экземпляру RemoteTestRunner.

Так как я могу получить список тестов без запуска всех из них?

3 ответов


вы можете использовать отражение для загрузки сборки и поиска всех тест атрибуты. Это даст вам все методы, методы испытаний. Остальное зависит от вас.

вот пример в MSDN об использовании отражения для получения атрибутов для типа. http://msdn.microsoft.com/en-us/library/z919e8tw.aspx


вот код для извлечения всех тестовых имен из сборки библиотеки тестовых классов:

//load assembly.
            var assembly = Assembly.LoadFile(Request.PhysicalApplicationPath + "bin\SystemTest.dll");
            //get testfixture classes in assembly.
            var testTypes = from t in assembly.GetTypes()
                let attributes = t.GetCustomAttributes(typeof(NUnit.Framework.TestFixtureAttribute), true)
                where attributes != null && attributes.Length > 0
                orderby t.Name
                    select t;
            foreach (var type in testTypes)
            {
                //get test method in class.
                var testMethods = from m in type.GetMethods()
                                  let attributes = m.GetCustomAttributes(typeof(NUnit.Framework.TestAttribute), true)
                    where attributes != null && attributes.Length > 0
                    orderby m.Name
                    select m;
                foreach (var method in testMethods)
                {
                    tests.Add(method.Name);
                }
            }

ответ Джастина не работает для меня. Следующее (извлекает все имена методов с помощью