3

基本的に、TeamCity用のNUnitプラグイン(プログラム、必ずしもそれを使用する特定のビルドステップではありません)を使用して、コードカバレッジ用のNCoverを使用して単体テストを実行したいと思います。単体テストではTypeMock 6を使用するため、これも必要です。働く。

これまでに試しました:

  • 基本的にTeamCityNUnitビルドステップを私のdllにポイントするだけですが、次のエラーメッセージが表示されて失敗します。

    Typemock Isolatorを実行するには、カバレッジツールとリンクして、次のいずれかを実行できるようにする必要があります。

    1. TypemockIsolator構成を介してカバレッジツールをリンクします
    2. TMockRunner.exe-linkを介してテストを実行します
    3. リンク付きのMSBuildまたはNAntにTypeMockStartタスクを使用する
  • 正しいコマンドラインを見つけようとして、私はこれを試しました:

    C:... \ Isolator \ 6.0 \ TMockRunner.exe "C:\ TeamCity ... \ JetBrains.BuildServer.NUnitLauncher.exe" v4.0 MSIL NUnit-2.5.9 MyAssembly.dll

    これはまったく同じエラーで失敗します。

  • TypeMockのファイル部分にある環境変数を設定してmocking_on.batも、結果は変わりません。

上記の例には(まだ)NCoverへの参照が含まれていないことに注意してください。これは、上記の例を使用してコマンドラインを数時間ハッキングしていて、基本的な単体テストをまだ実行していないためです。NCoverは、TeamCityのnunit-launcherの追加オプションであるため、これが、私がそこまで到達したときにそれを有効にするのと同じくらい簡単であることを願っています。

4

2 に答える 2

4

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 内からテストを実行できます。 build server 後でその決定を変更する可能性があります)。また、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 ビルド構成に追加しました。

  1. Visual Studio の解決策: デバッグ構成をビルドします。
  2. C:\Dev\SqlDatabases\Tests.bat (上記のバッチ ファイル) を実行します。

ビルド構成のアーティファクトの下にリストされていることを確認しcoverage.zipたところ、コード カバレッジ、タイプモック、およびユニット テストが得られました。

これまでに取得する方法がわからなかった唯一のことは、通常の TeamCity GUI を使用してすべて (TypeMock を除く) をセットアップするビルド構成のビルド結果をクリックすると、コード カバレッジの短い要約が一覧表示されることです。これは上記のセットアップには存在しませんが、完全なレポートと、TeamCity ビルド結果のタブがあります。

うまくいけば、これが他の誰かのトラブルを救うことができます.

于 2011-02-01T17:44:13.310 に答える
0

ラッセ、

TeamCity GUIを使用している限り、NCoverカバレッジで実行することは、NCoverカバレッジで実行することを選択するだけの簡単な問題であるはずです。私は、Typemockをミックスに投入しようとしたことがないので、それがどのように行われるかを聞くのを楽しみにしています。

于 2011-02-01T16:52:16.660 に答える