Domanda

Sto cercando di creare un breve bash script di qualcuno potrebbe correre in cygwin per eseguire tutti i test NUnit in un progetto .NET utilizzando NUnit-console. Attualmente ho la versione del sistema di NUnit alias a "NUnit", quindi se faccio funzionare "NUnit" eseguirà NUnit-console.

Il mio primo passo è stato quello di cercare di trovare tutte le linee di prova in modo ricorsivo. Questo lavora prevalentemente:

find . -name *.Test*.dll

ma restituisce entrambe le versioni / obj e / bin di una DLL.

In secondo luogo ho bisogno di capire un modo per passare tutti i risultati da quel ritrovamento a NUnit, preferibilmente in un'esecuzione che finora non ho idea di come fare.

Qualsiasi Cygwin / bash guru là fuori che può aiutare?

È stato utile?

Soluzione

L'elenco dei gruppi di cambiare dinamicamente? Se non cambia spesso, allora probabilmente non c'è bisogno di determinare quali gruppi di girare su in fase di esecuzione. Piuttosto, il problema è risolto meglio attraverso l'uso di un progetto NUnit. Ad esempio, creare il file di tests.nunit, con contenuti:

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

Esecuzione NUnit-console tests.nunit avrebbe eseguito tutti i test nelle assemblee app e Widget, nella cartella Debug. È anche possibile omettere la roba Config e activeconfig se non è rilevante e lista solo assemblee che sarà sempre testati indipendentemente dalla configurazione attiva.

Controlla la documentazione NUnit a correre su più assembly .

Altri suggerimenti

Ecco il mio script di lavoro per questo

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

Ma c'è un problema sottile. NUnit restituisce talvolta i codici di errore negativo che è OK per le finestre, ma illegale per * nix. Non so come Cygwin funziona con i codici di uscita negativi, ma mingw32 semplicemente come 0, vale a dire "$?" == "0" come risultato ossequi.

Una buona notizia, codici di errore negativi sono un po 'raro per NUnit e sono indicare problemi con la NUnit stesso (vedi questa domanda per i dettagli). Non ho trovato una soluzione per questo problema, quindi ho negativo di controllo codice di errore solo sul server di build. A livello locale dalla console bash Sto distribuendo solo quelli positivi.

Qualcosa di simile a questo:

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

Non testato - provare come questa per vedere se ti dà i file corretti:

find . -name "*.Test*.dll" -path /path/to/skip -prune -o -print
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top