2011-02-01 107 views
3

基本上我想使用TeamCity的NUnit插件(該程序不一定是使用它的特定構建步驟)來運行我的單元測試,使用NCover進行代碼覆蓋,由於我的單元測試使用了TypeMock 6,我需要那太工作了。獲得TeamCity運行NUnit測試,NCover和TypeMock都集成了嗎?

到目前爲止,我已經試過:

  • 基本上只是指向TeamCity的NUnit的建設步我的DLL,但失敗,出現以下錯誤信息:

    Typemock隔離器需要與覆蓋工具鏈接以運行,以啓用以下功能之一:

    1. 通過Typemock Isolator配置鏈接Coverage工具通過TMockRunner.exe
    2. 運行測試 - 鏈接
    3. 使用TypeMockStart任務的MSBuild或南特與鏈接
  • 試圖找出正確的命令行中,我嘗試這樣做:

    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的額外選項,所以我希望這很簡單,只要啓用它就可以了。

+0

您可能會在[TeamCity論壇]上獲得更多成功(http://devnet.jetbrains.net/community/teamcity/teamcity?view=discussions)。 – adrianbanks 2011-02-01 15:22:27

回答

4

由於TypeMock要求您使用自己的runner程序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 

然後,我添加了以下兩個集結步驟,我的TeamCity構建配置:

  1. 的Visual Studio解決方案:構建調試配置。
  2. 執行C:\開發\ SqlDatabases \ Tests.bat(上面的批處理文件)

我確信,coverage.zip是在文物在我的構建配置上市,現在我得到的代碼覆蓋率,typemock和單元測試。

唯一沒有想到如何得到的東西是,如果我點擊構建配置的構建結果,使用普通的TeamCity GUI設置一切(減去TypeMock),我得到一個代碼覆蓋率在上面的設置中沒有提供簡短的總結,但是完整的報告和TeamCity生成結果中的選項卡。

希望這可以拯救別人一些麻煩。

0

拉塞,

只要你使用TeamCity的GUI,與NCover覆蓋運行應該只是選擇與it.I've運行從來沒有嘗試過投擲Typemock進入混合一件簡單的事情,所以我期待着聽到這是怎麼回事。

+0

TypeMock需要你通過它來運行所有的東西,這意味着我不能在GUI中這樣做。自從我已經想出瞭如何做到這一點之後,我現在會添加自己的答案。 – 2011-02-01 17:38:59

相關問題