2011-02-01 105 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

相关问题