Frage

Ich versuche, einen kurzen Bash-Skript jemand zu schaffen könnte laufen in Cygwin alle nunit Tests in einem .NET-Projekt mit nunit-Konsole auszuführen. Zur Zeit habe ich die Systemversion von nunit auf „nunit“ aliased so, wenn ich „nunit“ läuft es nunit-Konsole ausführen.

Mein erster Schritt war, um zu versuchen und alle Testanordnungen rekursiv zu finden. Diese MOSTLY funktioniert:

find . -name *.Test*.dll

, aber es gibt sowohl / obj und / sind Versionen einer DLL.

Zweitens muss ich einen Weg zu Figur alle Ergebnisse aus diesem Fund nunit passieren, vorzugsweise in einer Ausführung, die so weit ich keine Ahnung, wie zu tun haben.

Jede Cygwin / bash-Gurus gibt, die kann helfen?

War es hilfreich?

Lösung

Ist die Liste der Baugruppen dynamisch ändern? Wenn es nicht oft ändern, dann brauchen Sie wahrscheinlich nicht zu bestimmen, welche Baugruppen zur Laufzeit laufen. Vielmehr ist Ihr Problem besser durch die Verwendung eines NUnit Projekt gelöst. Erstellen Sie zum Beispiel die Datei tests.nunit, mit Inhalt:

<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>

Beim Laufen nunit-Konsole tests.nunit würde alle Tests in dem App und Widget Baugruppen, in den Debug-Ordnern ausführen. Sie können weglassen auch die Config und activeconfig Sachen, wenn es nicht relevant und nur Liste Baugruppen ist, die immer unabhängig von aktiver Konfiguration getestet werden.

Schauen Sie sich die NUnit Dokumentation auf mehrere Baugruppen auf Lauf .

Andere Tipps

Hier ist meine Arbeits Skript für dieses

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

Aber es gibt ein kleines Problem. NUnit gibt manchmal negative Fehlercodes, die für Fenster in Ordnung ist, aber illegal für * nichts. Ich weiß nicht, wie funktioniert Cygwin mit negativem Exit-Codes aber MinGW32 nur behandelt sich als 0, das heißt "$?" == "0" als Ergebnis.

Gute Nachrichten, negative Fehlercodes eher selten sind für NUnit und zeigen Probleme mit Laufe NUnit selbst (siehe diese Frage für Details). Ich habe keine Abhilfe für dieses Problem finden, so dass ich negative Fehlercodeprüfung nur auf Build-Server. Vor Ort von bash Konsole bin ich Gabe nur positive.

So etwas wie folgt aus:

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

Ungeprüfte - probieren Sie es wie diese zuerst zu sehen, ob es Ihnen die richtigen Dateien gibt:

find . -name "*.Test*.dll" -path /path/to/skip -prune -o -print
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top