Запуск всех тестов NUNIT во всех монтажах от командной строки Cygwin

StackOverflow https://stackoverflow.com/questions/3619486

Вопрос

Я пытаюсь создать короткий скрипт Bash, кто-то может работать в Cygwin, чтобы выполнить все тесты NUNIT в проекте .NET с помощью NUNIT-Console. В настоящее время у меня есть системная версия NUNIT псевдонима для «NUNIT», поэтому, если я запуску «NUNIT», она будет выполнять NUNIT-Console.

Мой первый шаг должен был попытаться найти все тестовые сборки рекурсивно. Это в основном работает:

find . -name *.Test*.dll

Но он возвращает и / obj и / bin версии dll.

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

Любой Cygwin / Bash Guurus там, который может помочь?

Это было полезно?

Решение

Список сборки изменяется динамически? Если это не изменяется часто, то вам, вероятно, не нужно определять, какие сборки работают во время выполнения. Скорее, ваша проблема лучше решается благодаря использованию проекта NUNIT. Например, создайте файл Tests.nunit, с содержимым:

<NUnitProject>
  <Settings activeconfig="Debug"/>
  <Config name="Debug">
    <assembly path="ProjectA\bin\Debug\App.dll"/>
    <assembly path="ProjectB\bin\Debug\Widget.dll"/>
  </Config>
  <Config name="Release">
   <assembly path="ProjectA\bin\Release\App.dll"/>
    <assembly path="ProjectB\bin\Release\Widget.dll"/>
  </Config>
</NUnitProject>

Запуск NUNIT-Console Tests.nunit будет выполнять все тесты в приложении и виджетных сборках в папке отладки. Вы также можете пропустить вещи конфигурации и ActiveConfig, если это не актуально и просто перечислять сборки, которые всегда будут проверены независимо от активной конфигурации.

Проверьте NUNIT Документация при работе по нескольким собраниям.

Другие советы

Вот мой рабочий скрипт для этого

check_err()
{
    # parameter 1 is last exit code
    # parameter 2 is error message that should be shown if error code is not 0
    if [ "${1}" -ne "0" ]; then
        cat '~temp.log'
        echo ${2}
        rm -f '~temp.log' > /dev/null
        exit ${1}
    fi;
    rm -f '~temp.log' > /dev/null
}

for i in `find . -print | grep 'bin/Debug/[^/]*\.Tests\.dll$'`; do
    echo "Running tests from ${i} with NUnit...";
    cmd.exe /c "Lib\NUnit\nunit-console.exe ${i} /framework:net-4.0" > '~temp.log'
    check_err $? "Some tests failed."
done

Но есть тонкая проблема. NUNIT Иногда возвращает отрицательные коды ошибок, которые в порядке для Windows, но нелегальные для * NIX. Я не знаю, как Cygwin работает с негативными кодами выхода, но Mingw32 просто относится к ним как 0, то есть "$?" == "0" как результат.

Хорошие новости, негативные коды ошибок несколько редко для Nunit и указывают на проблемы с запуском самой NUNIT (см. этот вопрос Подробнее). Я не нашел обходной путь для этой проблемы, поэтому у меня есть отрицательная проверка кода ошибок только на сервере сборки. Локально из консоли Bash я передаю только положительные.

Что-то вроде этого:

find . -name "*.Test*.dll" -path /path/to/skip -prune -o -exec nunit {} \;

Не пропущено - попробуйте подобное этому, чтобы увидеть, дает ли это правильные файлы:

find . -name "*.Test*.dll" -path /path/to/skip -prune -o -print
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top