【问题标题】:how to debug with xUnit?如何使用 xUnit 进行调试?
【发布时间】:2012-06-27 16:07:49
【问题描述】:

我正在学习 xUnit,到目前为止,我发现它是一个最有用的工具。这让我开始重新思考我对 TDD 的一些编码策略。

但是,我遇到了一个有趣的问题。我的测试用例失败了。没有真正的问题,但我该如何调试呢?

具体来说,我的测试用例由于“超出索引”错误或类似原因而失败。它没有在断言语句中失败。我现在需要的是在 Visual Studio 调试器处于活动状态的情况下运行测试用例的某种方法,以便我可以看到不同变量的状态。

我不打算发布代码,因为这种情况肯定会再次出现。有谁知道如何调试测试用例本身?

差点忘了!我正在使用,

  • Visual Studio 2010 Ultimate(Dreamspark 许可证)
  • xUnit 1.9

我的工作流程涉及使用 xUnit GUI 运行程序来运行测试。

如果我的要求是不可能的,有人可以建议我可以使用的替代测试套件来满足我的需求吗?

【问题讨论】:

  • 其实,如果你要调试单元测试,这是一个糟糕的单元测试。测试应该设计得尽可能简单和直接,这样你就可以通过几乎不看它们来验证它的正确性。考虑重写这个测试。
  • @J0HN,有问题的错误来自我正在测试的代码,而不是单元测试。我的问题是找到它发生的原因。 xUnit 有用地告诉我第 XX 行产生了异常 YYY,但它没有告诉我任何其他信息。比如发生异常(或类似情况)时变量的状态是什么?
  • @J0HN 有些情况下单元测试本身还不错;我刚刚举了一个例子,由于 cognitive dissonance 而很难发现 ~~ 警告,这发生在项目开发的早期,并且与 SUT 中的数字文字有关转位数字;在这种情况下,单元测试 + 调试协作帮助我使 SUT 更加健壮。

标签: c# .net unit-testing debugging xunit


【解决方案1】:

在 VS2015 及更高版本中,安装 xunit.runner.visualstudio NuGet 包。然后调试就像在测试资源管理器窗口中右键单击测试一样简单。 (测试-->Windows-->TestExplorer,如果你看不到它)。您也可以右键单击测试代码中的任意位置,然后在上下文菜单中运行测试和调试测试。

【讨论】:

  • +1 @user1585345 谢谢...我忘记了“如有疑问,请右键单击”的口头禅;如果有必要,您的建议是快速调试单个失败测试的好方法。
  • 我已经尝试过了,但一直找不到 TestClass.cs。
【解决方案2】:

我尝试了以上所有方法,但没有成功。 对我有用的东西来自以下帖子: https://github.com/OmniSharp/omnisharp-vscode/issues/1630#issuecomment-317797607

在 .csproj 文件中,在 PropertyGroup 下添加以下内容: 便携

【讨论】:

    【解决方案3】:

    2020 年更新: 如果您将 Visual Studio Code 与 OmniSharp 一起使用,则可以单击方法上方的“调试测试”文本。

    【讨论】:

    【解决方案4】:

    查看此问题的答案:Stepping through and debugging code in Unit tests

    基本上:

    ...进入VS...主菜单中的“测试”,点击子菜单“调试”。 . .'.

    它也适用于我使用 VS2017 ;)

    【讨论】:

      【解决方案5】:
      1. 在方法中设置断点。
      2. 在 Visual Studio 菜单栏中,单击测试。
      3. 从 Debug 中单击 Selected Test 或 All Test。

      【讨论】:

        【解决方案6】:

        在 Visual Studio 2017 中,确保解决方案配置处于“调试”模式。在“发布”模式下,它不是在调试。

        【讨论】:

          【解决方案7】:

          我未能实现上述所有内容,但以下内容对我有用: 在要调试的行之前添加以下行(然后运行测试):

                  System.Diagnostics.Debugger.Launch();
          

          缺点是它会启动另一个 VS 实例 :)。

          干杯!

          【讨论】:

          • 不幸的是,这似乎是在已发布的 VS 2015 中调试 dnx 测试的唯一方法
          【解决方案8】:

          如果你有 resharper,安装了 X-unit contrib 扩展(强烈推荐!),右键单击 Visual Studio 中的类,然后单击“调试单元测试”。

          简单!

          【讨论】:

          • 只要你不使用应该支持 xUnit2 的 ReSharper 扩展,那么调试就很麻烦了....github.com/xunit/resharper-xunit/issues/9
          • +1 @Adam Diment ...谢谢...我正在使用带有 JetBrains ReSharper Ultimate 的 vs2015 Enterprise,所以我不确定此功能是来自 ReSharper 还是现在原生于 vs2015;无论如何,在右键单击我的 xUnit.net 测试类的类名时,由于您的指导,我找到了“调试测试”(ctrl+r,ctrl+t)...您的建议帮助我发现了我的测试的原因失败(特别是关于我被蒙蔽的文字的错字)。 B-)
          【解决方案9】:

          以下内容适用于 VS.NET 和 SharpDevelop。

          打开测试项目的属性并进入调试选项卡:

          • 在“启动操作”下,将“启动外部程序”设置为 xUnit 运行器 选择的可执行文件。

          • 在“开始选项”下,将“命令行参数”设置为 您项目的调试 DLL。

          • 还将“工作目录”设置为项目的“bin\Debug\”目录。

          然后选择“调试”>“运行”或按 F5 以在调试模式下运行您的测试。断点会被命中。

          以这种方式进行调试的好处是您不必每次都附加到 xUnit GUI,您只需要运行您的测试项目。

          【讨论】:

            【解决方案10】:

            我尚未对此进行测试,但您应该能够将 Visual Studio 连接到 xUnit GUI 并从那里进行调试。

            从“调试”菜单中选择“附加到进程”,在列表中找到可执行文件的名称,然后单击附加。根据需要在单元测试中设置断点并从 GUI 运行测试。断点应该按预期命中。

            【讨论】:

            • 使用 NUnit,您可以将 GUI 设置为调试时启动的程序,并将程序集名称作为参数传递。然后按 F5 将在调试器下使用正确的程序集启动 NUnit GUI。我假设你可以用 xUnit 做类似的事情。
            • @adrianbanks 非常感谢你的想法!我从来没有真正想到过。一些与“调试”属性有关的玩弄,当我运行调试和变量信息时,我让 xUnit GUI 运行器启动! :)
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2017-08-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-01-05
            • 1970-01-01
            • 2011-03-05
            相关资源
            最近更新 更多