在Visual Studio 2010中使用代码覆盖率运行NUnit测试

时间:2010-05-26 12:27:41

标签: c# visual-studio-2010 nunit mstest code-coverage

我们最近从Visual Studio 2008升级到Visual Studio 2010.作为代码库的一部分,我们有一大堆NUnit测试。我们希望能够在Visual Studio中运行这些单元测试,但启用代码覆盖率。我们有ReSharper,因此可以在Visual Studio中运行测试,但它不允许代码覆盖工具执行其操作并生成覆盖率统计信息。

有没有办法让这项工作,或者我们是否必须将测试转换为MSTest?


编辑:我们已经尝试了建议的工具:

  • TestDriven.Net
    这在Visual Studio中运行NUnit测试很好,甚至可以使用代码覆盖,但它也包括测试作为覆盖程序集的一部分。似乎没有办法排除测试,但包括正在测试的程序集(我们的测试与他们测试的代码在不同的程序集中)。我们也不想花费额外的2000英镑来支付我们为整个团队获得TestDriven.net的费用。

  • 加利奥
    这没用。为了获得覆盖输出,测试需要在Visual Studio测试运行器中运行。 Gallio不为NUnit提供此支持。

还有什么想法吗?我们确实找到了几个开源尝试来使这种类型的东西工作,但它们是陈旧的,并且长时间没有被触及(因此不支持VS2010)。

5 个答案:

答案 0 :(得分:6)

gallio自动化框架是一个开源项目,应该允许您完成此任务。该网站位于http://www.gallio.org/在上一版本中有最初的VS2010支持,在夜间版本中有更多的工作。

此处有更多相关信息:http://weblogs.asp.net/astopford/archive/2010/04/13/gallio-and-vs2010.aspx

但是,如果你有钱花在这上面,请看http://TestDriven.Net

答案 1 :(得分:6)

Jetbrains似乎正在使用名为“dotCover”的新产品来解决这个问题。它还处于初期阶段,但考虑到它们的记录,它很快就会成为主要参与者。

直到它发布,你可以“测试”位于here的夜间版本。

答案 2 :(得分:2)

您可以在运行NUnit测试时使VS 2010代码覆盖功能正常工作,但这是配置工作的一部分:

设置运行nunit-console-x86.exe的通用测试,如下所示:

Does VS2010 Code Coverage support nUnit? (xUnit的简化描述)

http://msdn.microsoft.com/en-us/library/ms182624(v=vs.100).aspx (一般说明)

确保:

  • 您已激活“仪器到位”。信任VS的部署将无法正常工作
  • 你运行nunit-console-x86.exe。 64位版本无法使用。
  • 需要代码覆盖率结果的所有库都构建到一个文件夹中。复制它们(例如通过构建事件)将不起作用。 (对于高级:您可以在其构建输出文件夹之外的其他位置检测库,但这非常棘手。)
  • 包含所有库的文件夹是通用测试的工作目录,您可以从中启动NUnit。
  • 您将NUnit的参数作为工作文件夹的相对路径。
  • 您还为NUnit提供了命令行选项/ noshadow

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

好吧,在设置了所有构建输出目录之后,我遇到了一个最奇怪的问题:从该文件夹中,NUnit不会运行。我让它从2个不同的位置运行,但在这里它“未找到nunit-console-runner.dll”。

我只是通过以下方式在另一个位置检测测试的库:

  • 测试>编辑设置>本地
  • 数据和诊断>代码覆盖率
  • 停用原始位置并添加测试文件夹中的库

今天它立即起作用了,但是前几天我试着将这些位置正确地放置了大约一个小时。我仍然不知道那天我搞砸了什么。

答案 3 :(得分:1)

阿德里安,

查看TestMatrix - 它将运行您的单元测试,代码覆盖率和单元测试性能分析 - 所有这些都本机集成到Visual Studio中。

答案 4 :(得分:1)

我在Code Coverage Runner上找到了CodePlex项目,它通过适配器连接VS测试和NUnit API。在撰写本文时,该项目自2008年3月以来尚未更新,但它可能适合您的需求。