Pregunta

Básicamente, me gustaría usar el complemento NUNIT para TeamCity (el programa, no necesariamente el paso de compilación específico que lo usa) para ejecutar mis pruebas unitarias, con Ncover para la cobertura de código, y dado que mis pruebas unitarias usan Typemock 6, yo también lo necesito laboral.

Hasta ahora he intentado:

  • Básicamente, apuntando al equipo TeamCity Nunit Build-Step a mis DLL, pero eso falla con el siguiente mensaje de error:

    El aislador Typemock debe estar vinculado con la herramienta de cobertura para ejecutar, para habilitar hacer una de las siguientes opciones:

    1. Enlace la herramienta de cobertura a través de la configuración del aislador Typemock
    2. Ejecutar pruebas a través de tmockrunner.exe -link
    3. Use tareas de typemockstart para msbuild o nant con enlace
  • Tratando de descubrir la línea de comando correcta, probé esto:

    C: ... isolator 6.0 tmockrunner.exe "c: teamcity ... jetbrains.buildserver.nunitlauncher.exe" v4.0 msil nunit-2.5.9 myassembly.dll

    Esto falla con exactamente el mismo error.

  • Establecer las variables de entorno que se encuentran en el mocking_on.bat Archivo parte de Typemock, esto no cambia el resultado.

Tenga en cuenta que los ejemplos anteriores no contienen ninguna referencia a NCover (todavía), es porque he estado pirateando en la línea de comando durante un par de horas con los ejemplos anteriores y aún no he recibido pruebas de unidad básicas en ejecución. NCover son opciones adicionales para el nunit-layer of Teamcity, así que espero que esto sea tan simple como simplemente habilitar eso cuando llego tan lejos.

¿Fue útil?

Solución

Dado que Typemock requiere que use su propio programa Runner, TmockRunner, no hay forma de usar las opciones de GUI en TeamCity para configurar todo.

En cambio, lo que terminé haciendo fue construir primero un archivo MSBuild personalizado con este contenido:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
        <TypeMockLocation>C:\Program Files (x86)\TypeMock\Isolator\6.0</TypeMockLocation>
        <NUnit>"C:\TeamCity\buildAgent\plugins\dotnetPlugin\bin\JetBrains.BuildServer.NUnitLauncher.exe"</NUnit>
        <NCover>C:\Program Files (x86)\NCover\NCover.Console.exe</NCover>
    </PropertyGroup>
    <Import Project="$(TypeMockLocation)\TypeMock.MSBuild.Tasks"/>
    <Target Name="TestWithTypeMock">
        <TypeMockStart Link="NCover3.0" ProfilerLaunchedFirst="true" Target="2.0"/>
            <Exec ContinueOnError="true" Command="$(NUnit) v2.0 x86 NUnit-2.5.9 SqlDatabases.Core.Tests\bin\Debug\SqlDatabases.Core.Tests.dll SqlDatabases.SqlServer.Tests\bin\Debug\SqlDatabases.SqlServer.Tests.dll /ncover:%22$(NCover)%22 /ncover-arg://ias /ncover-arg:SqlDatabases.Core /ncover-arg://ias /ncover-arg:SqlDatabases.SqlServer /ncover-arg://et /ncover-arg:.*Exception /ncover-arg://x /ncover-arg:c:\temp\coverage.xml"/>
        <TypeMockStop/>
    </Target>
</Project>

Este archivo guardo en un directorio en mi servidor TeamCity. Como no quería que el script de prueba fuera parte de mi repositorio, no lo agregué al control de origen (puedo construir y hacer clic con el botón derecho y ejecutar pruebas desde dentro de Visual Studio, si tengo algo que no está tan vinculado a mi Servidor de construcción podría cambiar esa decisión más tarde). Además, solo tengo 1 agente de construcción para mi servidor TeamCity, por lo que esto funciona para mí por el momento.

Además del archivo anterior, agregué el siguiente archivo por lotes:

@echo off
setlocal
set CURDIR=%CD%
copy c:\dev\sqldatabases\tests.msbuild .\
msbuild tests.msbuild /target:TestWithTypeMock
rd /s /q c:\dev\sqldatabases\codecoverage
md c:\dev\sqldatabases\codecoverage
"c:\program files\ncover\ncover.reporting.exe" c:\temp\coverage.xml //or FullCoverageReport:Html:c:\dev\sqldatabases\codecoverage
cd \dev\sqldatabases\codecoverage
del %CURDIR%\coverage.zip
7z a -r %CURDIR%\coverage.zip

Y luego agregué los siguientes dos pasos de compilación a mi configuración de compilación de TeamCity:

  1. Solución de Visual Studio: crea la configuración de depuración.
  2. Ejecutar c: dev sqlDatabases tests.bat (el archivo por lotes anterior)

Me aseguré de que coverage.zip figuraba en artefactos en mi configuración de compilación, y ahora obtuve cobertura de código, tipos de tipos y pruebas unitarias.

Lo único que no he descubierto cómo llegar tan lejos es que si hago clic en el resultado de compilación de una configuración de compilación que utiliza la GUI de TeamCity normal para configurar todo (menos typemock), obtengo una cobertura de código breve resumen enumerado, Esto no está presente en la configuración anterior, pero el informe completo es, y la pestaña en TeamCity crea resultados.

Esperemos que esto pueda salvarle a alguien más problemas.

Otros consejos

Lasse,

Mientras esté utilizando la GUI de TeamCity, ejecutar con la cobertura de NCOVER debería ser una simple cuestión de seleccionar para ejecutarlo. Nunca he intentado lanzar Typemock a la mezcla, así que espero escuchar cómo va.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top