Выполнение тестов NUnit через приложение Windows Form с NUnit Engine

Я пытаюсь выполнить тесты NUnit через приложение Windows Form с NUnit Engine, но я не понимаю, как указать путь к DLL, где находятся мои тесты (я уже включил DLL в ссылки). Когда я нажимаю кнопку, я хочу, чтобы тесты запускались; однако NUnit открывается, а затем сразу же закрывается, ничего не делая. Вот что у меня есть:

namespace ATF.GUI
{
    public partial class ATF_Main : Form
    {
        TestPackage package;
        ITestEngine engine;

        public ATF_Main()
        {
            InitializeComponent();
        }

        private void ATF_Main_Load(object sender, EventArgs e)
        {
            string path = Assembly.GetExecutingAssembly().Location;
            package = new TestPackage(path);
            package.AddSetting("Working Directory", Environment.CurrentDirectory);

            // Prepare the engine
            engine = TestEngineActivator.CreateInstance();
        }

        private void btnStartTests_Click(object sender, EventArgs e)
        {
            using (ITestRunner runner = engine.GetRunner(package))
            {
                // Execute the tests 
                XmlNode result = runner.Run(null, TestFilter.Empty);
            }
        }

person Mike    schedule 04.01.2017    source источник
comment
path должен указывать на dll, включающую ваши тесты   -  person Yacoub Massad    schedule 05.01.2017
comment
Я это понимаю, но как? Я попытался указать на корзину, в которой он находится, и все еще не мог заставить NUnit запустить тесты.   -  person Mike    schedule 05.01.2017
comment
Укажите полный путь, включая имя файла. Как узнать, были ли тесты запущены или нет? Проверяете ли вы содержимое узла result?   -  person Yacoub Massad    schedule 05.01.2017
comment
Это должно быть упакованное приложение; точный путь к файлу не будет работать. Я спрашиваю, как я могу указать TestPackage на тестовую DLL, на которую ссылается проект ATF.GUI. Я знаю, что тесты не выполняются, потому что на них установлена ​​точка останова, которую отладчик никогда не достигает.   -  person Mike    schedule 05.01.2017


Ответы (2)


Я никогда не получал реального ответа на это, но я понял это сам.

private void ATF_Main_Load(object sender, EventArgs e)
    {
        // Add reference to tests DLL and load it here by name
        Assembly testAssembly = Assembly.Load("Program.Tests");
        package = new TestPackage(testAssembly.Location);
        package.AddSetting("Working Directory", Environment.CurrentDirectory);
    }

Вы также можете добавить места сборки в список, если у вас есть несколько тестовых сборок.

person Mike    schedule 24.01.2017

Вы устанавливаете тестовую сборку как свою сборку графического интерфейса. Поскольку у него нет тестов, NUnit нечего делать. Я предполагаю, что он возвращает ошибку в результате.

Каким-то образом вашему приложению должен быть предоставлен путь к тестовой сборке. Это может быть через командную строку или какое-либо диалоговое окно. Вы можете посмотреть код для nunit3-console или nunit-gui, чтобы увидеть, как это делается.

Ваша идея использовать сборку, на которую ссылаются, кажется немного странной для упакованного приложения. Ваши пользователи должны будут иметь исходный код и каждый раз пересобирать его, ссылаясь на нужную тестовую сборку. Вы действительно этого хотите?

В случае, если вы это сделаете, вам нужно будет найти способ получить эту ссылку. Трудно сделать, если нет ничего постоянного, что всегда будет в нем.

person Charlie    schedule 04.01.2017
comment
Возможно, тогда я делаю это неправильно - я никогда не устанавливал NUnit с нуля, поэтому я немного потерялся на этом этапе. У меня есть два проекта в моем решении ATF.GUI и ATF.Tests (библиотека классов). ATF.GUI — это мой проект StartUp, и я хочу, чтобы кнопка автоматически запускала ATF.Tests. Каким будет правильный способ сделать это? - person Mike; 05.01.2017
comment
Движок настроен на выполнение тестов в сборке с учетом пути к этой сборке. Идея состоит в том, что движок и бегун ничего не могут знать заранее о том, где расположены тесты или как они называются, поэтому им нужно сообщить. - person Charlie; 06.01.2017
comment
Вы уже знакомы с использованием NUnit в виде пакета с помощью собственного средства запуска консоли или нового графического интерфейса? Если нет, то поможет сначала ознакомиться. Можете ли вы объяснить, почему вы хотите, чтобы бегун ссылался на тестовую сборку? - person Charlie; 06.01.2017
comment
Я знаком с NUnit как с пакетом, но не с NUnit 3+. Как еще я могу получить доступ к тестовой сборке из бегуна, если не ссылаюсь на нее? - person Mike; 06.01.2017
comment
Кроме того, мне нужно иметь возможность наблюдать за выполнением этих тестов в отладчике VS. Как правильно запустить NUnit, чтобы я мог это сделать? - person Mike; 06.01.2017
comment
Подумай об этом. NUnit не имеет ссылки на тестовую сборку каждого пользователя. :-) Вы указываете NUnit путь к тестовой сборке в командной строке. NUnit открывает пытается загрузить указанный вами файл и запустить в нем тесты. Ваш код должен делать то же самое. Если вы используете движок, он сделает это за вас — вам просто нужно передать ему путь к тестовой сборке. - person Charlie; 07.01.2017
comment
Для отладки под NUnit просто запустите NUnit под отладчиком. Если ваша тестовая сборка является отладочной сборкой, вы можете установить в ней точки останова и т. д. и посмотреть, что происходит. Если вы хотите отлаживать сам NUnit, вам нужна сборка отладки. Вы можете получить отладочную сборку, собрав NUnit из исходного кода. - person Charlie; 07.01.2017