1

我是 TeamCity 的新手,我正在尝试对其进行配置以构建和运行解决方案中的所有单元测试。它对于不使用 TypeMock 的测试工作正常,但对于使用 TypeMock 的测试却失败了。

我也浏览了 typemock.org 和 stackoverflow 上的很多帖子,但我没有得到任何明确的分步解决方案来解决这个问题。

我所做的是

添加了我正在使用的程序集列表

C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\MsTest.exe
C:\TeamCity\AutoDeploy\TypeMock.dll
C:\TeamCity\AutoDeploy\TypeMock.MSBuild.dll
C:\BuildAgent\work\d0c2681a8633b717\www.Domain.Tests\bin\Release\qqq.Domain.Tests.dll

我缺少一些构建配置,但我不确定我是否也必须为 MSTest 做这件事

4

2 回答 2

3

免责声明我在 Typemock 工作。

在您的情况下,最好的解决方案是使用某种构建脚本,例如 MSBuild 或 nant
如果您不使用构建脚本,您可以将 TeamCity 进程设置为在启用 Isolator 的情况下运行。以下是执行此操作的步骤:

  • 在 TeamCity 项目页面中,转到您希望更改的项目并点击设置。
  • 在设置页面中,转到构建参数并选择编辑。
  • 在编辑页面中选择添加新参数。
  • 在 Type 部分的编辑框中选择 Environment variable (env.)
  • 在名称文本框中输入 Cor_Enable_Profiling
  • 在值文本框中输入 0x1
  • 点击保存按钮

再次重复上述步骤,但将环境变量的名称更改为 COR_PROFILER 并将值更改为 {B146457E-9AED-4624-B1E5-968D274416EC}

这将导致 TeamCity 及其子进程(如 msbuild)使用 Isolator 运行配置文件。同样,我认为这不是最好的解决方案,但它应该为您完成这项工作。

于 2013-09-29T10:40:24.227 回答
0

我认为您会遇到此错误,因为您没有将 TypeMock 配置为使用 MSTest 运行测试。如果您尚未在 TeamCity Build Agent 机器中执行此操作,您可以按照以下步骤执行此操作:

  1. Windows“开始”>>所有程序>>TypeMock文件夹>>隔离器文件夹>>打开隔离器配置
  2. Profilers/Code Coverage选项卡下打开的新窗口中,选中复选框Show only available profilers并在上方的下拉列表中列出 NCover(这是假设您使用 NCover 来分析单元测试用例覆盖率和所有内容)。
  3. 从下拉列表中选择 NCover,然后单击Link with TypeMock Isolator

通过这个 TypeMock Isolator 也将配置为配置单元测试,我认为我希望您的 TypeMock 禁用问题将得到解决。

编辑:

抱歉说错了。如果您在构建中使用像 NCover 这样的分析器,上述内容将对您有所帮助。

您应该使用以下 MSBuild 使用 MSTest 和 TypeMock 运行测试:

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="RunTests" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

    <UsingTask TaskName="NCover.MSBuildTasks.NCover" AssemblyFile="C:\Program Files\NCover\Build Task Plugins\NCover.MSBuildTasks.dll" />
    <Import Project ="C:\Program Files (x86)\Typemock\Isolator\6.1\TypeMock.MSBuild.Tasks" />

    <PropertyGroup>
         <MSTest>"C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\MSTest.exe"</MSTest>    
    </PropertyGroup>


    <Target Name ="RunTests">
         <TypeMockStart Target="3.5" />
         <Exec ContinueOnError="true"  Command='$(MSTest) /noisolation "/testcontainer:C:\continuousintegration\root\CTM_VPOFFICEClassLibraries\CTM.VPOffice\CTM.VPOffice Unit Testing\bin\Release\CTM.VPOffice Unit Testing.dll"' />
         <TypeMockStop />
    </Target>
</Project>

您可以忽略上述示例中与 NCover 相关的内容,如果您在构建过程中没有测试分析,则只需忽略隔离器配置步骤。

于 2013-09-26T06:02:38.867 回答