让TeamCity运行NUnit测试,同时集成了NCover和TypeMock?

时间:2011-02-01 15:13:28

标签: nunit teamcity ncover typemock typemock-isolator

基本上我想使用TeamCity的NUnit插件(程序,不一定是使用它的特定构建步骤)来运行我的单元测试,使用NCover进行代码覆盖,并且由于我的单元测试使用TypeMock 6,我需要太努力了。

到目前为止,我已经尝试过:

  • 基本上将TeamCity NUnit构建步骤指向我的dll,但是失败并显示以下错误消息:

      

    Typemock Isolator需要与Coverage Tool链接才能运行,以启用以下操作之一:

         
        
    1. 通过Typemock Isolator配置链接Coverage工具
    2.   
    3. 通过TMockRunner.exe -link
    4. 运行测试   
    5. 对MSBuild使用TypeMockStart任务或使用Link
    6. 使用NAnt   
  • 尝试找出正确的命令行,我试过了:

      

    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的额外选项,所以我希望这很简单,只要在我走得那么远的时候启用它。

2 个答案:

答案 0 :(得分: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中运行测试,如果我得到的东西与我的不相关构建服务器我可能会在以后更改该决定。另外,我的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:\ Dev \ SqlDatabases \ Tests.bat(以上批处理文件)
  3. 我确保在我的构建配置中的工件下列出了coverage.zip,现在我得到了代码覆盖,类型模拟和单元测试。

    我唯一没想到如何到目前为止,如果我点击构建配置的构建结果,使用正常的TeamCity GUI来设置所有内容(减去TypeMock),我得到的代码覆盖率很短列出的摘要,这不在上面的设置中,但完整的报告是,以及TeamCity构建结果中的选项卡。

    希望这可以为别人带来一些麻烦。

答案 1 :(得分:0)

Lasse,

只要您使用TeamCity GUI,使用NCover覆盖运行应该只是选择与它一起运行的简单问题。我从未尝试过将Typemock投入混合,所以我期待听到去。