Correr todas las pruebas NUnit en todas assemblys de línea de comandos Cygwin
-
26-09-2019 - |
Pregunta
Estoy tratando de crear una fiesta de corta secuencia de comandos que alguien podría correr en cygwin para ejecutar todas las pruebas NUnit en un proyecto .NET utilizando nunit-consola. Actualmente tengo la versión del sistema de nunit alias de "nunit" por lo que si corro "nunit" se ejecutará nunit-consola.
Mi primer paso fue tratar de encontrar todos los conjuntos de prueba de forma recursiva. Este trabaja principalmente:
find . -name *.Test*.dll
pero devuelve ambas versiones / obj y / bin de un DLL.
En segundo lugar i tiene que averiguar una forma de pasar todos los resultados de ese hallazgo a nunit, preferiblemente en una ejecución que hasta el momento no tengo idea de cómo hacerlo.
Cualquier cygwin / bash gurús por ahí que puede ayudar?
Solución
¿La lista de los conjuntos de cambiar dinámicamente? Si no cambia a menudo, entonces es probable que no necesita determinar qué asambleas se ejecute en tiempo de ejecución. Más bien, el problema se resuelve mejor mediante el uso de un proyecto NUnit. Por ejemplo, crear el archivo tests.nunit, con contenidos:
<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-consola que ejecutar todas las pruebas en las asambleas Aplicación y widget, en la carpeta de depuración. También puede omitir el paquete de configuración y activeconfig si no es relevante y asambleas lista sólo que siempre será probado independientemente de la configuración activa.
Salida del href="http://www.nunit.org/index.php?p=multiAssembly&r=2.2.9" rel="nofollow noreferrer"> documentación .
Otros consejos
Aquí está mi guión de trabajo para este
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
Sin embargo, hay un problema sutil. NUnit devuelve a veces los códigos de error negativos que está bien para las ventanas, pero ilegal que * nix. No sé cómo Cygwin funciona con códigos de salida negativos pero mingw32 sólo los trata como 0, es decir "$?" == "0"
como resultado.
Buenas noticias, códigos de error negativos son algo raro para NUnit y están indicando problemas con el funcionamiento de NUnit en sí (ver esta pregunta para más detalles). Yo no encontrar una solución a este problema, así que tengo cheque código de error negativo sólo en servidor de compilación. Localmente desde la consola de fiesta estoy entregando sólo los positivos.
Algo como esto:
find . -name "*.Test*.dll" -path /path/to/skip -prune -o -exec nunit {} \;
No comprobado - probarlo como esto primero para ver si se le da los archivos correctos:
find . -name "*.Test*.dll" -path /path/to/skip -prune -o -print