Question

Je suis en train de créer une personne court script bash pourrait exécuter à Cygwin pour exécuter tous les tests de NUnit dans un projet .NET à l'aide nunit-console. Actuellement, j'ai la version du système de nunit à crénelage « nunit » si je lance « nunit » il exécutera nunit-console.

Ma première étape a consisté à essayer de trouver tous les ensembles de test récursive. Cela fonctionne SURTOUT:

find . -name *.Test*.dll

mais il retourne à la fois / obj et / bin versions d'un dll.

Deuxième j'ai besoin de trouver un moyen de passer tous les résultats de cette découverte à nunit, de préférence dans une exécution qui jusqu'à présent, je n'ai aucune idée comment faire.

Tous Cygwin / bash gourous là-bas qui aide peut?

Était-ce utile?

La solution

Est-ce que la liste des ensembles changer dynamiquement? Si cela ne change pas souvent, alors vous ne avez probablement pas besoin de déterminer les ensembles à exécuter sur lors de l'exécution. Au contraire, votre problème est mieux résolu par l'utilisation d'un projet NUnit. Par exemple, créer le fichier tests.nunit, avec le contenu:

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

Running tests.nunit nunit-console s'exécuter tous les tests dans les ensembles App et Widget, dans le dossier de débogage. Vous pouvez également omettre les choses Config et activeconfig si ce n'est pas des ensembles pertinents et liste seulement qui sera toujours testé indépendamment de la configuration active.

Consultez la documentation NUnit sur l'exécution sur plusieurs ensembles .

Autres conseils

Voici mon script de travail pour cette

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

Mais il y a un problème subtil. NUnit retourne parfois des codes d'erreur négatifs qui est OK pour les fenêtres, mais illégal pour les * nix. Je ne sais pas comment Cygwin fonctionne avec des codes de sortie négatifs mais MingW32 seulement traite eux comme 0, à savoir "$?" == "0" en conséquence.

De bonnes nouvelles, les codes d'erreur négatifs sont assez rares pour NUnit et sont en cours d'exécution indiquant des problèmes avec NUnit lui-même (voir ce question pour plus de détails). Je n'ai pas trouvé une solution à ce problème, donc je dois vérifier le code d'erreur négatif uniquement sur le serveur de build. Localement à partir de la console bash je remets seulement positifs.

Quelque chose comme ceci:

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

Untested - essayer comme ça d'abord pour voir si elle vous donne les bons fichiers:

find . -name "*.Test*.dll" -path /path/to/skip -prune -o -print
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top