Как использовать графический интерфейс NUnit с веб-сайтом C # / ASP.NET? - PullRequest
3 голосов
/ 21 мая 2010

У меня есть веб-сайт C # / ASP.NET, в котором есть некоторые файлы кода (* .cs) в каталоге App_Code. Я хотел бы проверить их с помощью NUnit. Я написал тестовый файл с соответствующими аннотациями [TestFixture] и [Test] и поместил его здесь: App_Code / Test / TestClassName.cs.

Я загружаю графический интерфейс NUnit, чтобы запустить его, но он хочет, чтобы я выбрал файл .exe или .dll. В папке bin моего проекта ничего нет. Мой проект успешно запускается и собирается и все, но все еще нет файла EXE или DLL. Как я могу заставить NUnit Gui просто запустить тест в этом классе?

Ответы [ 3 ]

3 голосов
/ 21 мая 2010

Я не рекомендую помещать тестовый код в тот же пакет, который вы развернете в производство.

Возможно, вы захотите переместить тестовые классы в библиотечный проект, что-то вроде Business.UnitTest (может быть встроенный способ создания конкретного проекта nUnit, если он есть, используйте его). Затем переместите бизнес-классы из каталога App_Code в другой проект с именем Business. Имейте Business.UnitTest ссылку на бизнес-библиотеку. Это должно заставить работать nUnit (я не верю, что nUnit работает с веб-сайтами, только с библиотеками, но я не уверен на 100%).

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

2 голосов
/ 25 мая 2010

Хитрость в проектах .NET Website заключается в том, что файлы кода обычно не компилируются заранее, они компилируются при выполнении соответствующих страниц. Это создает проблему при тестировании, поскольку, как вы упомянули, NUnit хочет запустить .exe или .dll для тестирования.

Одним из способов решения этой проблемы является преобразование проекта website в веб-приложение ; они звучат одинаково, но работают по-разному. В отличие от веб-сайта, не требующего предварительной компиляции, веб-приложение требует этого. Таким образом, у вас будет один или несколько проектов, которые компилируются в сборки (.dll) или исполняемые файлы (.exe). Затем NUnit может подключиться к ним для запуска тестов.

Чтобы это работало, вам нужно разделить тестируемый код на другой проект; ваше интерфейсное веб-приложение может ссылаться на этот другой проект для использования кода внутри. В идеале, интерфейс должен быть тонким слоем логики и взаимодействия с пользователем, и реальная работа может быть отправлена ​​во второй проект. Поэтому второй проект - это то, что вы захотите протестировать.

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

0 голосов
/ 25 мая 2010
  1. Сначала вы хотите создать новый проект для ваших тестов. Если у вас есть какие-либо внутренние классы или атрибуты, вы должны использовать InternalsVisibleToAttribute, чтобы иметь возможность проверить их в рамках вашего проекта тестирования, вне вашего «реального» проекта. Этот атрибут подходит для всей сборки, поэтому я рекомендую поместить его в файл Assembly.info вашей "реальной" сборки.

  2. В вашем тестовом проекте добавьте ссылку на вашу "реальную" сборку.

  3. Убедитесь, что точно знаете путь к вашему бинарному файлу (assembly.dll);

  4. Откройте ваш TestsProjectAssembly.dll в графическом интерфейсе NUnit, убедившись, что вы просматриваете нужную папку;

  5. Возможно, вы также захотите, чтобы графический интерфейс NUnit перезагружал вашу сборку при каждом запуске теста ( для этого есть опция в свойствах параметров );

  6. Запустите ваши тесты.

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

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