2013-09-06 3 views
3

У меня есть бегун GUI NUnit для запуска тестов на модульной тестовой сборке каждый раз, когда он построен. Проблема в том, что когда я пытаюсь построить, DLL в папке Debug используется NUnit, что предотвращает его создание, что предотвращает автоматический запуск теста. Есть ли способ обойти это?NUnit не выпускает .dll для моего проекта модульного тестирования

+0

Почему вы пытаетесь перестроить, когда тестовый бегун все еще работает? –

+0

Иногда случается, что процессы nunit-agent.exe умножаются и «висят». Единственное решение, которое я нашел, - это случайное завершение работы NUnit и ручное уничтожение процессов-сирот nunit-agent ... Однако это никогда не блокировало мои папки для сборки, поэтому это может быть другой случай. – BartoszKP

+0

@ HansPassant, идея здесь заключается в том, чтобы оставить графический интерфейс NUnit открытым при написании тестов и автоматически запускать их при перестройке. – Riddari

ответ

0

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

Поскольку Nunit использует вас .dll. Это не позволит вашему построению быть успешным.

+1

Это не очень удобно.Я только начинаю изучать TDD (и я, возможно, не делаю этого правильно). Сначала я пишу небольшой тест, затем кодирую, чтобы пройти этот тест, а затем написал еще один небольшой тест и так далее. Как только я закодирую небольшой бит, я хочу запустить тесты, чтобы проверить, проходит ли он. Чтобы продолжать открывать и закрывать тестовый графический интерфейс после каждого небольшого изменения кода, это боль. – Ben

0

У меня была аналогичная проблема некоторое время назад, и моим окончательным решением было отказаться от использования NUnit GUI runner и просто запустить их непосредственно из кода.

В моем проекте я ссылался на библиотеки NUnit, необходимые этим недавно построенным dlls, а также nunit.core и nunit.utils. Сам код очень прост:

TestResult ExecuteTests(string testAssemblyPath) { 
    CoreExtensions.Host.InitializeService(); 
    TestPackage testPackage = new TestPackage(testAssemblyPath); 
    testPackage.BasePath = Path.GetDirectoryName(testAssemblyPath); 

    RemoteTestRunner testRunner = new RemoteTestRunner(); 
    testRunner.Load(testPackage); 

    TestResult testResult = testRunner.Run(new NullListener(), TestFilter.Empty, true, LoggingThreshold.Warn); 

    testRunner.Unload(); 
    CoreExtensions.Host.UnloadService(); 

    return testResult; 
} 

объект TestResult является очень мощным. Помимо всего прочего, он содержит все результаты, подвыборы, сами тесты и т. Д. Чтобы их проанализировать, вы можете либо создать простой парсер, либо использовать одну из возможностей, предоставляемых библиотеками NUnit. Мой любимый XmlResultWriter, но есть и другие. Все они можно найти в файле nunit.util.dll.

К сожалению, это все равно блокирует перезагрузку dll. Я избежал этой проблемы, выполнив ее в отдельном AppDomain и выгрузив этот домен после завершения тестов. Затем dll прекрасно освобождается, и вы можете делать с ним все, что хотите.

0

Могу ли я предложить несколько иной подход, но по той же схеме, как @UvarajGopu ....

Пока вы используете Visual Studio выше, чем «Экспресс» версия, и если вы пишете UnitTests в отдельный проект (как правило, вместе с проектом тестируется, с суффиксом «.UnitTests»), то сделать это:

  • Установите ваш UnitTests проект как проект StartUp (щелкните правой кнопкой мыши в обозревателе решений «Установить как Startup Project ")
  • В свойствах проекта для этого проекта, на вкладке« Отладка », choo se «Запустите внешнюю программу» и выберите исполняемый файл GUI NUnit. Поместите имя сборки UnitTests в «Аргументы командной строки».

Теперь вы можете просто нажать F5 (чтобы начать отладку), которая будет строить ваши проекты, и запустите для вас графический интерфейс NUnit. Это дает дополнительное преимущество в том, что если ваши тесты терпят неудачу, вы можете добавить контрольные точки и пройти через отладчик (без необходимости прикладывать отладчик вручную).

Смежные вопросы