NcoverとTypemockの両方が統合された状態で、TeamCityをヌニットテストに実行することができますか?
-
27-10-2019 - |
質問
基本的に、TeamCity用のNunitプラグイン(プログラム、必ずしも使用した特定のビルドステップではありません)を使用してユニットテストを実行したいと思います。コードカバレッジにはncoverを使用します。単体テストではTypemock 6を使用しているため、それも必要です働く。
これまでに試しました:
基本的にTeamCity Nunitを私のDLLにビルドステップに向けているだけですが、次のエラーメッセージで失敗します。
Typemock Isolatorは、次のいずれかを実行できるように、実行するためのカバレッジツールにリンクする必要があります。
- Typemock Isolator構成を介してカバレッジツールをリンクします
- tmockrunner.exe -link経由でテストを実行します
- MSBUILDまたはNANTのLinkを使用してTypeMockstartタスクを使用します
正しいコマンドラインを把握しようとして、私はこれを試しました:
C:... Isolator 6.0 tmockrunner.exe "c: teamcity ... jetbrains.buildserver.nunitlauncher.exe" v4.0 msil nunit-2.5.9 myassembly.dll
これはまったく同じエラーで失敗します。
で見つかった環境変数の設定
mocking_on.bat
TypeMockの一部をファイルしますが、これは結果を変えません。
上記の例にはNCOVERへの言及は含まれていないことに注意してください。それは、上記の例を使用して数時間コマンドラインをハッキングしており、それでも基本的なユニットテストを実行していないためです。 NcoverはTeamCityのNunit-Launcherへの追加のオプションですので、これが私がそこまで到達したときにそれを可能にするのと同じくらい簡単であることを願っています。
解決
TypeMockは独自のランナープログラムであるTmockrunnerを使用する必要があるため、TeamCityのGUIオプションを使用してすべてをセットアップする方法はありません。
代わりに、私がやったことは、最初にこのコンテンツを使用してカスタムMSBuildファイルを構築することでした。
<?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>
このファイルは、TeamCityサーバーのディレクトリに保存します。テストスクリプトをリポジトリの一部にしたくなかったので、ソースコントロールに追加しませんでした(Visual Studio内からテストをビルドして右クリックして実行できます。サーバーのビルド私は後でその決定を変更するかもしれません)。また、TeamCityサーバー用のビルドエージェントは1つしかないので、当面は機能します。
上記のファイルに加えて、次のバッチファイルを追加しました。
@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
そして、次の2つのビルドステップをTeamCityビルド構成に追加しました。
- Visual Studioソリューション:デバッグ構成を構築します。
- c: dev sqldatabase tests.batを実行する(上記のバッチファイル)
私はそれを確認しました coverage.zip
私のビルド構成のアーティファクトの下にリストされていましたが、今ではコードカバレッジ、TypeMock、およびユニットテストが得られました。
これまでに取得する方法を理解していない唯一のことは、すべてをセットアップするために通常のTeamCity GUIを使用するビルド構成のビルド結果をクリックすると、コードカバレッジの短い要約がリストされていることです。これは上記のセットアップには存在しませんが、完全なレポートは、TeamCityのタブが結果を構築します。
うまくいけば、これにより他の誰かが問題を救うことができます。
他のヒント
ラッセ、
TeamCity GUIを使用している限り、NCOVERカバレッジで実行することは、それを使用して実行することを選択するだけの単純な問題であるはずです。タイプモックをミックスに投げ込んでみたことがないので、それがどうなるかを聞くことを楽しみにしています。