2010-09-01 4 views
1

J'essaie de créer un court script bash que quelqu'un pourrait exécuter dans cygwin pour exécuter tous les tests nunit dans un projet .NET en utilisant nunit-console. Actuellement, j'ai la version système de nunit alias à "nunit", donc si je cours "nunit", il exécutera nunit-console. Ma première étape consistait à essayer de trouver récursivement tous les assemblages de test. Cela fonctionne MOSTLY:Exécution de tous les tests NUnit dans tous les assemblys à partir de la ligne de commande Cygwin

find . -name *.Test*.dll 

mais il renvoie à la fois les versions/obj et/bin d'une DLL.

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

Y at-il des gourous cygwin/bash qui peuvent vous aider?

Répondre

4

Est-ce que la liste des ensembles changer dynamiquement? Si cela ne change pas souvent, vous n'avez probablement pas besoin de déterminer les assemblages à exécuter lors de l'exécution. Au contraire, votre problème est mieux résolu grâce à 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> 

Exécution nunit-console tests.nunit courrait tous les tests dans les ensembles App et Widget, dans le dossier de débogage. Vous pouvez également omettre les éléments Config et activeconfig si ce n'est pas pertinent et ne faire que lister les assemblages qui seront toujours testés quelle que soit la configuration active.

Consultez la section NUnit documentation on running on multiple assemblies.

+0

hein ne savait pas à ce sujet. Cela permettrait probablement d'atteindre l'objectif racine. Merci. – JoshReedSchramm

0

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

pas de chance avec cela. comme il sort une tonne de fichiers non seulement Test * .dlls quand je me débarrasse de -o il n'imprime rien. sans le -path -prune -o si j'exécute les résultats contre nunit je reçois "No tel fichier ou répertoire" pour chaque entrée. – JoshReedSchramm

1

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 renvoie parfois des codes d'erreur négatifs, ce qui est correct pour Windows, mais illégal pour * nix. Je ne sais pas comment Cygwin fonctionne avec des codes de sortie négatifs, mais MinGW32 les traite comme 0, c'est-à-dire "$?" == "0". Bonne nouvelle, les codes d'erreur négatifs sont quelque peu rares pour NUnit et indiquent des problèmes avec NUnit lui-même (voir this question pour plus de détails). Je n'ai pas trouvé de solution de contournement pour ce problème, j'ai donc un code d'erreur négatif, vérifiez seulement sur le serveur de construction. Localement à partir de la console bash, je ne donne que des positifs.

Questions connexes