Запуск всех тестов NUnit во всех сборках из командной строки Cygwin - PullRequest
1 голос
/ 01 сентября 2010

Я пытаюсь создать короткий сценарий bash, который кто-то может запустить в cygwin для выполнения всех тестов nunit в проекте .NET с помощью nunit-console. В настоящее время у меня есть системная версия nunit с псевдонимом «nunit», поэтому, если я запускаю «nunit», он выполнит nunit-console.

Первым делом я попытался рекурсивно найти все тестовые сборки. Это наиболее работает:

find . -name *.Test*.dll

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

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

Есть какие-нибудь гуру cygwin / bash, которые могут помочь?

Ответы [ 3 ]

4 голосов
/ 08 сентября 2010

Меняется ли список сборок динамически? Если он не меняется часто, вам, вероятно, не нужно определять, какие сборки запускать во время выполнения. Скорее, ваша проблема лучше решается с помощью проекта 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 запустит все тесты в сборках App и Widget в папке Debug. Вы также можете опустить данные Config и activeconfig, если они не актуальны, и просто перечислить сборки, которые всегда будут тестироваться независимо от активной конфигурации.

Ознакомьтесь с документацией NUnit о работе на нескольких сборках .

1 голос
/ 22 сентября 2011

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

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 иногда возвращает отрицательные коды ошибок, что нормально для окон, но недопустимо для * nix. Я не знаю, как Cygwin работает с отрицательными кодами выхода, но MinGW32 просто обрабатывает их как 0, то есть "$?" == "0" в результате.

Хорошая новость: отрицательные коды ошибок встречаются довольно редко для NUnit и указывают на проблемы с запуском самого NUnit (см. этот вопрос для подробной информации). Я не нашел обходного пути для этой проблемы, поэтому у меня отрицательная проверка кода ошибки только на сервере сборки. Локально из консоли bash я передаю только положительные.

0 голосов
/ 01 сентября 2010

Примерно так:

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

Не проверено - попробуйте сначала вот так, чтобы убедиться, что оно дает правильные файлы:

find . -name "*.Test*.dll" -path /path/to/skip -prune -o -print
...