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

标签 nunit teamcity ncover typemock typemock-isolator

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

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

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

    Typemock Isolator needs to be linked with Coverage Tool to run, to enable do one of the following:

    1. link the Coverage tool through the Typemock Isolator Configuration
    2. run tests via TMockRunner.exe -link
    3. use TypeMockStart tasks for MSBuild or NAnt with Link
  • 为了找出正确的命令行,我尝试了这个:

    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 的额外选项,所以我希望这就像在我到达那一步时启用它一样简单。

最佳答案

由于 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(上面的批处理文件)

我确保 coverage.zip 列在我的构建配置中的工件下,现在我得到了代码覆盖率、typemock 和单元测试。

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

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

关于nunit - 让 TeamCity 运行 NUnit 测试,同时集成 NCover 和 TypeMock?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4864266/

相关文章:

c# - "bool"作为对象 vs "string"作为对象测试相等性

c# - 为单元测试哈希表数据类型生成随机值

c# - 如何编写 protected 方法抛出异常的测试用例?

带有 Rhino Mocks 异常的 NUnit : Why is it throwing this exception?

c# - 如何记录 NUnit 测试错误或失败消息?

msbuild - 将构建配置设置为暂存

continuous-integration - 我如何使用 TeamCity 安全地进行生产发布?

teamcity - 替换 TeamCity 构建脚本/命令中的字符

c# - 如何使用 Jenkins 计算 NCover 的代码覆盖率?

nunit - 在FinalBuilder中为NUnit设置NCover