Запуск тестов Nunit на c # и запись журналов выполнения

Я пытаюсь выполнить тестовые примеры Nunit, написанные на C #, с помощью консольной программы. До сих пор я пробовал разные способы сделать это, но не смог найти идеального подхода для достижения того же.

Подход 1. Использование пакета NUnitTestAdapter. Этот пакет более старый и не может запускать тесты, созданные с использованием последней версии nunit 3.2.1. Но он отлично работает со старыми версиями, такими как 2.6.4.

В решение добавлен пакет NUnitTestAdapter. Затем попробовал приведенный ниже код.

CoreExtensions.Host.InitializeService();
        TestSuiteBuilder builder = new TestSuiteBuilder();
        TestPackage testPackage = new TestPackage(@"path to dll");
        RemoteTestRunner remoteTestRunner = new RemoteTestRunner();
        remoteTestRunner.Load(testPackage);
        TestSuite suite = builder.Build(testPackage);
        TestSuite test = suite.Tests[0] as TestSuite;
        var numberOfTests = ((TestFixture)test.Tests[0]).TestCount;
        int i = 0;
        foreach (TestMethod t in ((TestFixture)test.Tests[0]).Tests)
        {
            Console.WriteLine(t.TestName.Name);
            //TestName testName = ((TestMethod)((TestFixture)test.Tests[0]).Tests[i]).TestName;
            TestFilter filter = new NameFilter(t.TestName);
            TestResult result = test.Run(new NullListener(), filter);
            ResultSummarizer summ = new ResultSummarizer(result);
            NUnit.Core.NUnitFramework.Assert.AreEqual(1, summ.ResultCount);
            i++;
        }

Могу ли я получить любую обновленную версию этого, тогда это будет прекрасным решением.

Подход 2: Использование Nunit3-консоли

Добавил ссылку на nunit3.console.exe в мой проект и попробовал с кодом ниже

string path = @"path to dll";
NUnit.ConsoleRunner.Program.Main(new[] { path });

Это вызывает ошибку: «Либо сборка не содержит тестов, либо правильный тестовый драйвер не найден».

Кто-нибудь может сообщить мне, как мы можем запустить тесты с журналом выполнения?


person user3625533    schedule 24.05.2016    source источник


Ответы (1)


NUnit должен работать не так.

В первом примере вы используете внутренние классы и методы NUnit 2.x, которые не документированы для общего использования. Они были объявлены общедоступными, потому что в прошлом это было нашей стандартной практикой для всех методов, вызываемых нашими собственными тестами. Кроме того, использование вами тестового адаптера NUnit не имеет смысла, поскольку этот пакет предназначен для подключения NUnit к тестовому окну Visual Studio. Я подозреваю, что это работает для вас, потому что он извлекает сборку nunit.core, которую вы фактически используете.

Во втором примере вы вызываете основной объект напрямую. Вы уже писали о том, что это не работает, поэтому я не буду вдаваться в подробности. Я просто скажу, что запуск автономной программы путем обращения к ней и вызова ее main работает только в самых простых случаях. Для такой программы, как консольный бегун, которая динамически загружает различные сборки, это не обязательно будет работать.

NUnit 3 предоставляет опубликованный API для запуска тестов. Люди просили нас об этом много лет. Наконец-то он здесь! Почему бы не использовать это? Ознакомьтесь с документацией nunit 3 для получения информации о Test Engine и его API. Если по какой-то причине вы хотите запускать тесты программно, это правильный путь в наши дни.

Конечно, вы можете продолжать пытаться реализовать свой подход, и я буду продолжать комментировать по мере необходимости. Я просто хочу прояснить для людей, которые найдут этот пост в будущем, что NUnit не предназначен для использования таким образом.

person Charlie    schedule 24.05.2016
comment
Спасибо за объяснение, Чарли, я прочитал так много сообщений о том, чтобы запускать тесты nunit программно, и я мог бы использовать более старый способ их выполнения. Я сошлюсь на документы, как вы упомянули в ответе. - person user3625533; 24.05.2016
comment
Я думаю, вы имеете в виду этот API. Это стабильная версия? Я вижу, что есть комментарий к верхнему высказыванию, который может быть изменен. - person user3625533; 24.05.2016
comment
API прошел четыре выпуска: 3.0, 3.0.1, 3.2 и 3.2.1. Мы добавили к нему ничего, но не удалили. - person Charlie; 24.05.2016
comment
Комментарий вверху связан с тем, что вы смотрите на спецификацию, которая использовалась для разработки api. Мне нужно пройти через это и создать актуальную документацию, показывающую, что было на самом деле построено. Тем не менее, это хорошее руководство, если вы объедините его с просмотром intellisense. - person Charlie; 24.05.2016