Меня попросили сделать небольшой побочный проект, чтобы предоставить простое приложение одному из наших клиентов. Обычно я работаю над внутренним кодом, в котором все свои потребности в тестировании выяснены, и я еще не имел сомнительного удовольствия от написания тестов для GUI, поэтому мне немного неясно, как мне настроить код тестирования и инструменты для EXE.
Моим первым инстинктом было просто включить тесты в код приложения, однако для этого потребовалось бы предоставить ряд специфичных для тестов зависимостей, которые я получил от инструкций, чтобы не доставлять их заказчику. Я также не могу выдать наличные деньги за специально созданный инструмент тестирования, поэтому мне нужно использовать имеющиеся у меня инструменты ( StoryQ , RhinoMocks и NUnit), которого на самом деле должно быть более чем достаточно, чтобы протестировать поведение простого приложения с графическим интерфейсом. Так что, насколько я вижу, это оставляет мне попытку найти хороший баланс между сохранением дизайна действительно простым или намеренно чрезмерным проектированием ради тестов. Похоже, я либо собираю приложение с бизнес-логикой в отдельной библиотеке и тестирую по ней, как обычно, либо нахожу какой-то другой механизм, позволяющий мне запустить исполняемый файл, не разбивая дополнительные модули, которые дизайн приложения не делает очень нужно.
Изменить:
Обратите внимание, что этот вопрос о том, как структурировать отношения между NUnit и моим исполняемым файлом - в отличие от DLL - а не о том, как разделить представление и бизнес-логику.
/Редактировать
Итак, мой вопрос:
- Существует ли определенный / рекомендуемый метод для настройки простого приложения с графическим интерфейсом пользователя с помощью модульных тестов, позволяющий мне адекватно проверять состояние и поведение, используя имеющиеся у меня инструменты и не прибегая к чрезмерной разработке?
- Я пропустил что-то фундаментальное в том, как NUnit должен вызываться / настраиваться при тестировании EXE (в отличие от DLL)?
- Можете ли вы привести или указать мне примеры примеров того, как всего этого достичь?
Я понимаю, что может быть несколько способов сделать это, поэтому я ищу конкретные рекомендации по внедрению, основанные на вашем опыте.