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

让TeamCity运行NUnit测试,同时集成NCover和TypeMock?,nunit,teamcity,ncover,typemock,typemock-isolator,Nunit,Teamcity,Ncover,Typemock,Typemock Isolator,基本上,我想使用TeamCity的NUnit插件(程序,不一定是使用它的特定构建步骤)来运行我的单元测试,NCover用于代码覆盖率,因为我的单元测试使用TypeMock 6,所以我也需要它 到目前为止,我已经尝试: 基本上只是将TeamCity NUnit构建步骤指向我的dll,但失败并显示以下错误消息: Typemock隔离器需要与Coverage Tool链接才能运行,以便执行以下操作之一: 通过Typemock隔离器配置链接覆盖工具 通过TMockRunner.exe运行测试-链接 使

基本上,我想使用TeamCity的NUnit插件(程序,不一定是使用它的特定构建步骤)来运行我的单元测试,NCover用于代码覆盖率,因为我的单元测试使用TypeMock 6,所以我也需要它

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

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

    Typemock隔离器需要与Coverage Tool链接才能运行,以便执行以下操作之一:

  • 通过Typemock隔离器配置链接覆盖工具
  • 通过TMockRunner.exe运行测试-链接
  • 使用带有链接的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启动器的额外选项,因此我希望这与在我达到这一目标时启用它一样简单。

Lasse


只要您使用的是TeamCity GUI,使用NCover coverage运行应该只是选择使用它的一个简单问题。我从来没有尝试过将Typemock加入其中,所以我期待着听到这是怎么回事。

因为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解决方案:生成调试配置
  • 执行C:\Dev\SqlDatabases\Tests.bat(上述批处理文件)
  • 我确保
    coverage.zip
    列在构建配置中的工件下,现在我得到了代码覆盖率、typemock和单元测试

    到目前为止,我唯一没有弄清楚的是,如果我单击使用普通TeamCity GUI设置所有内容(减去TypeMock)的构建配置的构建结果,我会得到一个代码覆盖率简短摘要,这在上述设置中不存在,但完整的报告是,以及TeamCity构建结果中的选项卡


    希望这可以为其他人省去一些麻烦。

    在.TypeMock上询问可能会更成功。TypeMock要求您运行所有内容,这意味着我不能仅在GUI中执行此操作。既然我已经知道怎么做了,我现在就添加我自己的答案。
    @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