在Visual Studio 2010中运行带有代码覆盖率的NUnit测试

21
我们最近从Visual Studio 2008 升级到了 Visual Studio 2010。在我们的代码库中,有一组非常大量的NUnit测试。我们希望能够在Visual Studio内运行这些单元测试,但启用代码覆盖。我们使用ReSharper可以在Visual Studio内运行测试,但它不能让代码覆盖工具发挥作用并生成覆盖统计数据。
是否有办法使其正常工作,还是必须将测试转换为MSTest?
编辑:我们已经尝试了建议的工具:
- TestDriven.Net 这可以在Visual Studio内很好地运行NUnit测试,甚至可以使用代码覆盖,但它也包括测试作为覆盖的程序集的一部分。似乎没有办法排除测试,但包括被测试的程序集(我们的测试位于与测试代码不同的程序集中)。我们也不想花费额外的2000英镑来为整个团队获得TestDriven.net。
- Gallio 这并没有起作用。为了获得覆盖率输出,需要在Visual Studio测试运行器中运行测试。Gallio不支持NUnit提供这种支持。
还有其他的想法吗?我们确实找到了几个开源尝试使此类事情工作的项目,但它们已经陈旧并且长时间没有更新(因此不支持VS2010)。

2
另一个想法:给微软发送一封邮件,让他们的工具更具可扩展性(例如运行任何程序以进行代码覆盖分析,如Ncover)。 - schoetbi
5个回答

6

2
如果您使用nCover的社区版进行覆盖测试,并将项目升级到.net4,则需要购买完整版本,因为在我尝试使用社区版时,它不支持.net4程序集。这是值得投资的好选择。对于TDD.Net来说加1分。 - Pondidum
1
TDD.net 还有一个个人版,非商业使用完全免费。 - Anindya Chatterjee

6

Jetbrains似乎正在通过名为“dotCover”的新产品解决这个问题。虽然这个产品现在还处于起步阶段,但考虑到他们的记录,很快就会成为主要参与者。

在其正式发布之前,您可以在这里测试每晚构建的版本。


1
作为更新,dotCover已公开发布,目前版本为1.1。 - Jura Gorohovsky

2
您可以在运行NUnit测试时启用VS 2010代码覆盖率功能,但这需要进行大量配置工作:
设置一个通用测试,以以下方式运行nunit-console-x86.exe: VS2010是否支持nUnit的代码覆盖? (xUnit的简化描述) http://msdn.microsoft.com/en-us/library/ms182624(v=vs.100).aspx (一般描述)
确保:
  • 你启用了 "instrument in place"。相信VS的部署不会起作用。
  • 你运行nunit-console-x86.exe。64位版本将无法工作。
  • 需要代码覆盖结果的所有库都建立在一个单独的文件夹中。复制它们(例如通过构建事件)不起作用。(高级用户:您可以在另一个位置上仪表化库,而不是它们的生成输出文件夹,但这很棘手。)
  • 包含所有库的文件夹是通用测试的工作目录,您从中启动NUnit。
  • 您将参数作为相对路径提供给NUnit。
  • 您还向NUnit提供命令行选项/noshadow。

当您将来自不同文件夹的dll复制到单个测试文件夹中时,可能会发生奇怪的事情。例如,我得到了令人放心的结果,即运行单元测试时几乎所有单元测试的代码都被覆盖到了。真可惜,代码覆盖功能没有找到由单元测试测试的库!

好的,在设置所有构建输出目录后,我遇到了一个奇怪的问题:从那个文件夹中,NUnit无法运行。我已经在两个不同的位置上运行它,但是在这里出现了“找不到nunit-console-runner.dll”的错误。
我只能通过在另一个位置对被测试库进行仪器化来解决问题:
  • 测试 > 编辑设置 > 本地
  • 数据和诊断 > 代码覆盖率
  • 停用原始位置并添加来自测试文件夹的库
今天它立即起作用了,但是前几天我尝试了大约一个小时才弄清楚位置。我仍然不知道我那天搞砸了什么。

1

Adrian,

看一下TestMatrix - 它可以运行你的单元测试,进行代码覆盖率和单元测试性能分析 - 而且所有这些都原生集成在Visual Studio中。


看起来很不错,但与我们已经付出了很多代价的VS2010高级版中已经可用的“免费”工具相比,它仍然相当昂贵。 - adrianbanks
1
有道理,Adrian!如果你支付的VS2010工具能够做到你想要的...再次强调,与你购买的带代码覆盖率的VS2010版本相比,TestMatrix是免费的,你同意吗? - sergeb

1
我在 CodePlex 上发现了 Code Coverage Runner 项目,它通过适配器将 VS 测试和 NUnit API 进行了桥接。截至本文撰写时,该项目自 2008 年 3 月以来没有进行过更新,但它可能适合您的需求。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接