Есть ли ручное взаимодействие в нун-тестах? - PullRequest
1 голос
/ 03 июня 2019

Я использую Nunit из C # и .NET Core для тестирования оборудования / производства на некоторых электронных устройствах. Тестовые случаи стимулируют оборудование по-разному, и в качестве окончательной проверки я включаю светодиод. Это довольно сложно проверить автоматически (без создания какого-либо пользовательского оборудования), поэтому я хочу, чтобы пользователь проверил шаг проверки вручную, чтобы пройти или не пройти, если светодиод включен или нет. Возможно ли это даже в Nunit?

Я пытался использовать Console.ReadLine()/Console.ReadKey(), который не работает. Есть ли способ заставить это работать или есть альтернативы этому?

Другой вариант, который у меня есть, - поместить этот шаг за пределы структуры Nunit, например, в сценарии оболочки. Но тогда я потерял бы преимущества обработки результатов и многое другое. Любые рекомендации для этого?

Ответы [ 3 ]

1 голос
/ 03 июня 2019

NUnit на самом деле не работает с консолью - и на самом деле вы не должны использовать его для тестирования чего-то, что требует взаимодействия с пользователем - что было бы интеграционным тестом. Хотя вы могли бы реализовать это:

if(Double.TryParse(Console.ReadLine(), out var ok) && ok)
    Assert.Pass("Test OK");
else
    Assert.Fail("Test failed");

Я сомневаюсь, что это хорошая идея, так как ее невозможно автоматизировать, что является одной из основных целей юнит-тестов.

Поскольку все, что вы хотите, кажется некоторым маркером для NUnit, если ваш тест прошел успешно, я бы всегда использовал Assert.Inconclusive, чтобы указать, что пользователь должен каким-то образом интерпретировать результат (например, файл) , Фактически вы можете полностью игнорировать NUnit для этого типа теста, просто запустите свое приложение и позвольте своему пользователю использовать его как обычно.

Кроме того, напишите юнит-тесты для всего, что является тестируемым. При необходимости измените код, чтобы получить что-то тестируемое, извлекающее бизнес-логику из вашего пользовательского интерфейса.

1 голос
/ 03 июня 2019

Конечно, можно взломать nuint, но стоит ли эта «фича»? Я думаю, что это будет вонючим и потребует от вас / ваших коллег больше ресурсов при поддержке, потому что здесь нет простого обходного пути. Я предлагаю вам разделить логику на две части:

Один для полуавтоматического (т. Е. Ручного тестирования), который поставляется в виде простого консольного приложения с вопросами и ответами экспертов (включается / выключается какой-то светодиод? Искра горит?

Другой для автоматического тестирования (NUnit, прочее) как простой dll.

Преимущество этого подхода заключается в том, что вы можете запустить автоматический тест из полуавтоматического консольного приложения в какой-то момент (возможно, при запуске), и вы можете легко взаимодействовать с экспертом.

0 голосов
/ 03 июня 2019

NUnit и другие инфраструктуры тестирования предназначены для выполнения модульного тестирования.

Единица определяется Википедией как

Модульные тесты - это, как правило, автоматические тесты, написанные и запускаемые программным обеспечением. разработчики, чтобы убедиться, что раздел приложения (известный как «единица») соответствует своей конструкции и ведет себя как задумано.

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

Следовательно, это не совсем то, для чего были созданы NUnit или подобные модульные среды тестирования.

Поэтому используйте NUnit для тестирования программной части, а затем посмотрите на другие варианты интеграционного тестирования, что может означать написание других инструментов или даже просто ручное выполнение!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...