1

根据日志,我缺少获取测试覆盖率的信息。可能的原因有:

  1. 包含/排除模式不正确
  2. 程序集在没有调试信息的情况下编译
  3. PDB 文件不可用
  4. 为 MSTest 启用了 Visual Studio 代码覆盖率
  5. TESTRUNCONFIG 用于 MSTest 并且未禁用 Visual Studio 代码覆盖率

作为 TeamCity 的新手,我需要一些关于如何操作的指导。

  1. 我已经通过+:*DLL 包含了所有 DLL。目前没有排除,但我试图通过-:*test*省略测试本身。
  2. 我使用DEBUG配置文件进行编译,并将结果放在服务器上的bin/debugobj/debug目录中。根本没有释放
  3. 我在服务器上的.source/bin/debug中有 PDB 文件。
  4. 由于我在 TeamCity 服务器上运行 nUnit 和 dotCover,因此不涉及 VS。
  5. 由于我在 TeamCity 服务器上运行 nUnit 和 dotCover,因此不涉及 VS。

我想念什么?我还能做什么?

编辑

该系统是:VS13、TFS10、TC8.2(最新可用的包含 nUnit 和 dotCoverage)

作为测试步骤的日志部分(编译步骤中没有报告错误,退出代码 0)。在此之后,仅删除 dotCover 快照文件。但是请注意,找不到 DATA 文件,并且 XML 文件不包含数据。

<?xml version="1.0" encoding="UTF-8"?>
<Root DotCoverVersion="2.6.1000.602" 
      ReportType="TeamCityXml" 
      CoveragePercent="0" 
      TotalStatements="0" 
      CoveredStatements="0"/>

我可以在这里做什么?

[10:59:39]第 2/2 步:测试(NUnit)(29 秒)
[10:59:39]开始:C:\TeamCity\buildAgent\plugins\dotnetPlugin
\bin\JetBrains.BuildServer.NUnitLauncher.exe #TeamCityImplicit
[10:59:39]在目录:C:\TeamCity\buildAgent\work\263aa919ed5f7bb8
[10:59:46]JetBrains dotCover Console Runner v2.6.1000.602。版权所有 (c) 2009-2014 JetBrains sro 保留所有权利。
[10:59:55][JetBrains dotCover] 覆盖会话开始 [2014-06-30 10:59:55]
[11:00:02] 启动 TeamCity NUnit 测试运行
器 [11:00:02] 运行 NUnit-2.6。 .NET Framework v4.0 x64
[11:00:03]AutonomousTesting.dll
[11:00:03]CoverageTest.TestExample.TestEquality
[11:00:03]CoverageTest.TestExample.TestException下的 3 个测试
[11:00:03]CoverageTest.TestExample.TestInequality
[11:00:03]CoverageTest.TestExample.TestOmission
[11:00:03]测试被忽略:CoverageTest.TestExample.TestOmission
[11:00:05]AutonomousTesting.dll
[ 11:00:05]CoverageTest.TestExample.TestEquality
[11:00:05]CoverageTest.TestExample.TestException
[11:00:05]CoverageTest.TestExample.TestInequality
[11:00:05]CoverageTest.TestExample.TestOmission
[11: 00:05] 测试被忽略:CoverageTest.TestExample.TestOmission
[11:00:07][JetBrains dotCover] Coverage session 已完成 [2014-06-30 11:00:07]
[11:00:07][JetBrains dotCover] Coverage结果后处理开始 [2014-06-30 11:00:07]
[11:00:08][JetBrains dotCover] Coverage 结果后处理完成 [2014-06-30 11:00:08]
[11:00:09]##teamcity[importData type='dotNetCoverage' tool='dotcover 'file='C:\TeamCity\buildAgent\temp\buildTmp\coverage_dotcover16594618384737853441.data']
[11:00:09]从'C:\TeamCity\buildAgent\temp\buildTmp\coverage_dotcover16594618384737853441.data'导入数据(8.38 KB)使用“dotNetCoverage”处理器 [11:00:09]进程以代码 0 退出
[11:00:09]等待 1 个服务进程完成
[11:00:09]处理 1 个覆盖率报告
[11:00: 09]通过dotcover为文件生成覆盖率报告:[C:\TeamCity\buildAgent\temp\buildTmp\coverage_dotcover16594618384737853441.data]
[11:00:09]获取dotCover版本
[11:00:09] 启动 dotCover:C:\TeamCity\buildAgent\tools\dotCover\dotCover.exe 版本 C:\TeamCity\buildAgent\temp\buildTmp\dotCover4472367238745438467Version
[11:00:09]输出:JetBrains dotCover Console Runner v2.6.1000.602。版权所有 (c) 2009-2014 JetBrains sro 保留所有权利。
[11:00:09]dotCover exited with code: 0
[11:00:09]Use DotCover 2.6.x commands set
[11:00:09]Merge dotCover reports (9s)
[11:00:19]Started dotCover: C:\TeamCity\buildAgent\tools\dotCover\dotCover.exe 合并 C:\TeamCity\buildAgent\temp\buildTmp\dotcover4719506578346509917.xml
[11:00:19]输出:JetBrains dotCover Console Runner v2.6.1000.602。版权所有 (c) 2009-2014 JetBrains sro 保留所有权利。[JetBrains dotCover] 快照合并开始 [2014-06-30 11:00:18] [JetBrains dotCover] 源快照数:1 [JetBrains dotCover] 快照合并完成 [2014-06-30 11:00:19]
[11: 00:19]dotCover 退出代码:0

4

3 回答 3

2

康拉德,不幸的是,我对 .net 或团队城市的了解不够(什么?),无法告诉您您的设置有什么问题 - 因此,如果我必须修复它,这将更像是我会看的指南.

覆盖通过检测编译的二进制文件来工作,以便它们在运行时吐出信息。设置好后,您的单元测试将在运行时将信息输出到某种结果文件中。测试完成后,您可以分析该结果文件。

democodemonkey 的答案中的教程使 TeamCity 看起来实际上是在进行测试覆盖。我很确定情况并非如此。TeamCity 最有可能与您的工具交互,并向您隐藏细节。但是,如果它只是不起作用,隐藏细节可能没有帮助!

我的第一步是弄清楚如何在没有 TeamCity 的情况下从命令行运行该工具。一旦你能做到这一点,你就可以弄清楚你需要使用什么 TeamCity 配置来获得相同的结果。此链接是 dotCover CLI 文档。

http://www.jetbrains.com/dotcover/webhelp/dotCover__Setting_up_Coverage_Analysis_JetBrains_TeamCity.html

我们使用 Jenkins 和许多 linux 类型的工具——但尝试手动近似构建/测试一直是找出它为什么在服务器上不起作用的最快方法。

于 2014-07-03T17:46:04.263 回答
1

我按照这个不错的小教程让它为我工作。如果您没有得到任何结果,您可以尝试以下内容:

小提示:如果您做的一切正确但不会生成报告,请查看 BuildLog。在第一次尝试时,我得到了这个错误:

解决方案:

无法读取源文件 >'C:\TeamCity\buildAgent\temp\buildTmp\dotcover8583844779204955574.xml'。找不到路径“C:\Windows\system32\config\systemprofile\AppData\Local\Temp\4q-kqg6z.tmp”的一部分。

在“C:\Windows\system32\config\systemprofile\AppData\Local”中创建搜索到的“Temp”文件夹</p>

通常它不存在,因此出现了错误。在此之后它工作。

如果这不起作用,那么您可能需要提供更多信息,以便我们帮助您推断出问题所在。

例如,您的路径是什么,您安装了哪些版本,您为构建配置启用了哪些设置等。


编辑:正如你所提到的,你已经有了这个工作,我想知道你是否还有以前工作构建的构建日志?在你的同事搞砸之前。您是否有机会在构建日志工作时和不工作时进行差异?它可能会让你知道他改变了什么。


我设法进行了全新的配置,以测试生成覆盖所需的最少工作量。这正是我采取的步骤。也许这里有些事情你会发现你做了不同的事情。

在 localhost:8080 的 TeamCity 主屏幕中,单击“创建项目”

  • 名称:我的项目名称
  • 点击“创建”

单击“添加构建配置”

  • 名称:调试

点击“VCS设置”

单击“创建并附加 VCS 根”

点击“添加构建步骤”

  • 跑步者类型:MSBuild
  • 步骤名称:构建 MyProjectName
  • 构建文件路径:MyProjectName.sln
  • MSBuild 版本:Microsoft .NET Framework 4.5
  • MSBuild 工具版本:4.0
  • 运行平台:x64
  • 点击“保存”

点击“添加构建步骤”

  • 跑步者类型:NUnit
  • 步骤名称:运行 MyProjectName 测试
  • .NET 运行时平台:x64
  • .NET 运行时版本:4.0
  • 从以下位置运行测试:MyProjectName.Tests\bin\Debug\MyProjectName.Tests.dll
  • .NET 覆盖工具:Jetbrains dotCover
  • 点击“保存”

点击“项目”

点击“运行...”

毕竟,构建应该已经生成了覆盖率。祝你好运!

于 2014-06-30T08:00:06.547 回答
1

我遇到的问题是,尽管我执行了测试并从中获得了结果,但结果中没有显示测试覆盖率。造成这种情况的原因是在覆盖程序集过滤器选择中,我使用的是:

+:MySolution.*.dll
+:MySolution.*.exe
-:MySolution.*.Tests.dll

但是,要计算覆盖结果,您必须从过滤器中删除 .DLL 扩展名,使其变为:

+:MySolution.*
-:MySolution.*.Tests

然后结果神奇地流过。

于 2016-03-31T03:10:09.647 回答