2012-02-28 14 views
14

Tradicionalmente, nunit-console.exe ha sido incluido en el repositorio y en el servidor de compilación (o cualquier otra máquina) este EXE fue llamado desde algún script de compilación.¿Cómo ejecutar la prueba NUnit usando el paquete NUnit.Runners y psake?

Ahora que el NUnit.Runners package está disponible, me pregunto cómo podría usarse esto desde un script de compilación psake. Es un paquete de nivel de solución, por lo que no deja ningún rastro en packages.config y no se puede restaurar automáticamente como otros paquetes a nivel de proyecto, así que supongo que uno debería llamar al Install-Package desde el script psake, esperar la descarga y luego ejecutar la unidad prueba? Afortunadamente, esta descarga solo se puede ejecutar una vez y no ralentizará la compilación cada vez que se ejecute. O lo hará?

+0

Por lo que entiendo correctamente, necesita una tarea que compruebe si los corredores están instalados y si no, se ejecuta nuget e instala el paquete? – stej

+1

Sí, algo así. (Idealmente, los paquetes de nivel de solución deben tener incorporada la funcionalidad de restauración automática y simplemente debería llamar a nunit-console.exe en algún lugar dentro de la carpeta 'packages', pero probablemente solo venga en alguna versión futura de NuGet.) – Borek

+0

I no era consciente de que existen paquetes de nivel de solución en absoluto. ¿Cómo los identificas? ¿Cómo rastrea VS que NUnit.Runners ya está instalado? – springy76

Respuesta

0

Esto no responde a su pregunta, pero puede ser útil para alguien que enfrenta un problema similar. Me encontré con el mismo problema al intentar configurar una compilación de TeamCity. Trabajé alrededor de esto volviendo a una versión anterior de nunit.

NUnit 2.5.10.11092 todavía tiene el exe nunit en el paquete nuget.

8

Acabo de toparme con esto yo mismo. Muy fácil de arreglar de la siguiente manera:

  1. Obtenga la última versión de la extensión Nuget Package Manager. Estoy en 1.8 en este momento.
  2. Añadir el paquete Nunit.Runners a su solución
  3. Copiar el elemento relacionado con el corredor de packages.config en su carpeta de .nuget en el archivo packages.config de su proyecto de prueba de unidad

A partir de ahora en adelante, cuando construyas, Nuget desplegará los paquetes Nunit.Runners si no está en la máquina. Luego hago referencia al corredor de Nunit del paquete en mi compilación de línea de comando.

Tengo esto trabajando en un pequeño proyecto que hice para un TeamCity build light on Github. Packages.config en el proyecto de prueba unitaria ha sido modificado como se discutió anteriormente. Puede mirar el archivo MSBuild para ver cómo ejecuto las pruebas desde la línea de comando. (build.proj, que hace referencia a algunos destinos y propiedades que figuran en la carpeta tools \ msbuild del repositorio). Necesitará instalar el último Administrador de paquetes de Nuget antes de intentar construir en VS.NET o desde la línea de comandos (clicktobuild.bat).

Debería poder trasladar la idea de cómo ejecutar la consola Nunit desde la ubicación correcta a psake con bastante facilidad.

+1

El enlace para "generar luz en Github" está roto 404 :(, enlace de trabajo https://github.com/SouthsideSoftware/BuildLight – roundcrisis

2

He creado un issue with nuget developers, y propuse una solución.

modificar el archivo nuget.targets con los siguientes cambios:

En <PropertyGroup Condition=" '$(OS)' == 'Windows_NT'"> añadir este elemento:

<SolutionLevelPackagesConfig>$([System.IO.Path]::Combine($(SolutionDir), ".nuget\packages.config"))</SolutionLevelPackagesConfig> 

En <PropertyGroup> agregar este elemento:

<RestoreSolutionLevelCommand>$(NuGetCommand) install "$(SolutionLevelPackagesConfig)" -source "$(PackageSources)" $(RequireConsentSwitch) -solutionDir "$(SolutionDir) "</RestoreSolutionLevelCommand> 

En <Target Name="RestorePackages" DependsOnTargets="CheckPrerequisites"> agregar este elemento antes del comando de restauración para WinNT:

<Exec Command="$(RestoreSolutionLevelCommand)" 
       LogStandardErrorAsError="true" 
       Condition="'$(OS)' == 'Windows_NT' And Exists('$(PackagesConfig)') And Exists('$(SolutionLevelPackagesConfig)')" /> 

Esto hizo que mi msbuild restaurara los paquetes del nivel de solución.

Cuestiones relacionadas