NUnit-Console не находит тестовых приспособлений для теста NUnitForms с NUnit 3.x

Я возился с NUnitForms и столкнулся с проблемой в своем простом тесте. Я предоставлю дополнительную информацию ниже, но, чтобы кратко обобщить вопрос, я нахожусь в состоянии, которое мне нужно наследовать от класса NUnitFormTest, чтобы использовать функциональность ExpectModal, но это приводит к тому, что тесты не могут быть найдены (используя NUnit 3.6.1) . Если я перейду на NUnit версии 2.x, тесты будут найдены, но я получаю ошибки в функции TearDown. Есть ли что-то, что мне здесь не хватает?

Теперь полную информацию смотрите ниже...

Мой тест изначально ссылался на NUnit 3.6.1 и выглядел следующим образом:

using EnterpriseManager;
using NUnit.Extensions.Forms;
using NUnit.Framework;

namespace ManagerTests
{
    [TestFixture]
    public class ManagerTests
    {
        [Test]
        public void ConnectTest()
        {
            ConnectForm form = new ConnectForm();
            form.Show();

            ButtonTester testButton = new ButtonTester("TestConnectionButton", "ConnectForm");
            testButton.Click();

            LabelTester testLabel = new LabelTester("StatusLabel", "ConnectForm");
            Assert.AreEqual("Connection successful", testLabel.Text);
        }
    }
}

В моем первоначальном тесте выше я не наследовал от класса NUnitFormTest (в то время я не знал об этом), но даже несмотря на то, что он отсутствовал, мой тест был бы найден обозревателем тестов Visual Studio, и я мог запустить свой тест через приложение nunit3-console (который прошел).

В конце концов я расширил свой тест, чтобы вызвать модальное диалоговое окно, которое вызвало у меня проблемы, хотя в конце концов я прочитал о функциональности ExpectModal, которая привела меня к добавлению наследования NUnitFormTest. Тест стал следующим:

using EnterpriseManager;
using NUnit.Extensions.Forms;
using NUnit.Framework;

namespace ManagerTests
{
    [TestFixture]
    public class ManagerTests : NUnitFormTest
    {
        [Test]
        public void ConnectTest()
        {
            ConnectForm form = new ConnectForm();
            form.Show();

            ButtonTester testButton = new ButtonTester("TestConnectionButton", "ConnectForm");
            testButton.Click();

            LabelTester testLabel = new LabelTester("StatusLabel", "ConnectForm");
            Assert.AreEqual("Connection successful", testLabel.Text);

            ExpectModal("ConnectToServer", delegate { 
                LabelTester label = new LabelTester("ConnectStatusLabel", "ConnectToServer");
                Assert.AreEqual("Connected", label.Text);
            });

            // Launch the modal dialog
            ButtonTester connectButton = new ButtonTester("ConnectToServerButton", "ConnectForm");
            connectButton.Click();
        }
    }
}

Вот тут и начались проблемы. После добавления наследования класса NUnitFormTest ни Visual Studio, ни nunit3-console.exe не обнаружили никаких тестов. Я подумал, что это может быть связано с версией упомянутой NUnit, поэтому я понизил версию до различных версий 2.x. Это позволило Visual Studio обнаружить тесты (хотя nunit3-console.exe продолжал сообщать о «неубедительном» результате), но все тесты завершались ошибкой:

Result StackTrace:  
--TearDown
at NUnit.Extensions.Forms.Desktop.Destroy()
at NUnit.Extensions.Forms.NUnitFormTest.Verify()
Result Message: TearDown : System.ComponentModel.Win32Exception : The requested resource is in use

Я провел некоторые поиски по этой проблеме, но все, что я нашел, казалось, предполагало, что это была какая-то ранее встречавшаяся проблема с NUnit, которая была исправлена ​​​​в какой-то момент (не цитируйте меня). Итак, теперь я нахожусь в состоянии, когда мне нужно наследовать от класса NUnitFormTest, чтобы использовать функциональность ExpectModal, но это приводит к тому, что тесты не найдены. Тем не менее, если я перейду на NUnit версии 2.x, у меня возникнут проблемы с функцией TearDown. Есть ли что-то, что мне здесь не хватает?


person Fizz    schedule 10.05.2017    source источник
comment
Невозможно попробовать это в настоящее время, но потенциальное решение проблемы TearDown заключается в переопределении свойства UseHidden, которое находится в NUnitFormTest, для возврата false.   -  person ajg    schedule 10.05.2017
comment
Любая идея, есть ли известный способ использовать NUnitForms с NUnit 3.x или он будет работать только с версиями 2.x?   -  person Fizz    schedule 10.05.2017
comment
Не уверен, боюсь, его возраст с тех пор, как я его использовал, и похоже, что он не выпускался в течение нескольких лет.   -  person ajg    schedule 10.05.2017


Ответы (1)


NUnitForms не обновлялся много лет, поэтому он по-прежнему зависит от NUnit V2. Когда вы получаете производные от NUnitFormTest, вы используете NUnit 2.6.2, независимо от того, что, по вашему мнению, вы установили, потому что код тесно связан с версией NUnit.

NUnitForms можно легко обновить до NUNit 2.6.4, но помимо этого это более серьезное изменение, которое может даже потребовать перезаписи.

Кстати, Люк уже давно добавил меня в проект, но я не проявлял активности. Когда-то у меня были надежды заставить его версию работать с NUnit 3, но я сомневаюсь, что сейчас существует большой спрос на тестирование Windows Forms.

Вы должны удалить все пакеты для платформы NUnit из своего решения и ссылаться на версию, установленную с помощью NUnitForms. Если вы хотите поэкспериментировать с разными версиями, они должны быть версиями NUnitForms, чтобы и ваши тесты, и NUnitForms ссылались на одну и ту же копию NUnit.

person Charlie    schedule 10.05.2017
comment
Хорошо, спасибо за информацию, которая проясняет для меня ситуацию. - person Fizz; 10.05.2017