【问题标题】:What is the best way to debug a NUnit test?调试 NUnit 测试的最佳方法是什么?
【发布时间】:2023-03-15 21:20:01
【问题描述】:

我的平台:Visual C# 2008 Express Edition with NUnit 2.2.7

我有一个解决方案,我的代码在一个项目中,我的 NUnit 单元测试在同一个解决方案的不同项目中。

我一直在努力调试和单步执行 NUnit 测试。我在网上找到了一些建议调用以下内容的参考资料:

NUnit.ConsoleRunner.Runner.Main(args);

但这甚至不能编译 - 它有编译器错误:

错误 1 ​​类型或命名空间名称 'Runner' 中不存在 命名空间“NUnit.ConsoleRunner”(是 你错过了一个程序集参考?)

我已经添加了我能找到的所有程序集引用,但没有任何效果。

最后,这是我一起破解的,它有效,但也许你的好读者可以提出更好的解决方案:

1) 在我的测试项目中,我要调试的测试用例的类名是MyTestClass。它有一个名为 Init() 的 [TestFixtureSetUp] 方法,实际的测试用例在 [Test] 函数 MyTest() 中

2) 在我的代码项目中,我有一个控制台程序 TestProgram.cs,它可以编译为 EXE。

在TestProgram.cs中,我按如下方式调用测试用例

// First instantiate the test class
MyTestClass tc = new MyTestClass();

// Call the TestFixtureSetup method
tc.Init();

// Now call the actual test
tc.MyTest();

这可行,我可以调试并单步执行测试用例。

如果有人对使用 Visual Studio 2008 Express 有任何更好的建议而无需支付额外的插件,我非常感谢您的建议。

【问题讨论】:

  • 一般来说,如果你做对了,而且步骤很小,你真的不应该使用调试器。但你可能处于不同的境地..

标签: c# visual-studio-2008 nunit


【解决方案1】:

Jon 是一种好方法,但不是更自动的方法;)

这是我already say on SO:

您可以创建一个空白项目(例如选择控制台应用程序),在项目的属性中您可以选择 DEBUG 标签并选择Start External Program。把Nunit的路径。然后,在开始选项中,命令行参数选择包含所有测试的 DLL(我的总是在 nunit\bin...)。比起选择Enable unmanaged code debugging,你就可以在VS中启动项目,甚至可以一步步使用调试器。

这样,你不需要每次都做宏或任何事情,它只是一个普通的 F5 :)

【讨论】:

  • 您还需要一个单独的项目吗?你不能在你的单元测试项目中设置这些选项吗?
  • 肯特是正确的。 (当然,除非 Express Edition 不允许在按 F5 时启动外部程序)
  • 在 Visual C# 2010 Express 中,不能使用“启动外部程序”。来自msdn.microsoft.com/en-us/library/68c8335t.aspx“Express 版本,例如 Microsoft Visual C# Express,不支持更改 StartAction 属性;这仅在完整的 Visual Studio 产品中受支持。”
【解决方案2】:

看看http://nunit.com/blogs/?p=28

这是一种享受。

【讨论】:

  • 谢谢 BlackWasp。此链接解决了付费版本具有“启动外部程序”选项而 Express 版本没有的问题。
  • 谁能恢复那个网页?我真的很想阅读它,但 URL 已失效...
【解决方案3】:

由于您使用的是 Visual Studio 的 Express 版本,因此您不能使用免费的 TestDriven.NET 插件。这很不幸,因为这确实是我用来调试单元测试的最佳工具。

Runner 类可以在 nunit-console-runner.dll 程序集中找到,因此请务必添加对它的引用。我不确定它有什么功能是您的简单入口点没有的,但最好使用它来保证安全和将来的兼容性。

另一个值得一提的(脏)选项是让您的单元测试调用Debugger.Attach()。我没有尝试过快速安装,但是当你的单元测试运行时,你应该被提示附加一个调试器。然后,您可以选择现有的 VS 实例并使用它进行调试。

【讨论】:

  • 你用过 ReSharper 的测试运行器吗?我发现它比 TestDriven.NET 好得多——尽管它当然不是免费的。
  • 嗨乔恩,是的,我有,我同意这是一个不错的跑步者。但是,由于资源需求,我不是 ReSharper 的粉丝。我尝试了很长一段时间(> 3 个月),发现它给我带来了很多痛苦。
【解决方案4】:

在我的商店,我们的做法与您完全一样。不利的一面是,这意味着设置可能与 NUnit 不完全一样。从好的方面来说,这样做非常简单,并且允许创建一个最小的环境来重现错误。

【讨论】:

    【解决方案5】:

    我在网上找到了一些参考资料 建议拨打以下电话: NUnit.ConsoleRunner.Runner.Main(args); 但这甚至没有编译 - 它有 编译器错误:

    JFY 您需要在 NUnit DLL 包中添加对 nunit-console-runner 程序集的 .NET DLL 引用(我有 2.2.4.0 ) 似乎该类也已重命名,但如果您需要它就在那里。

    NUnit.ConsoleRunner.ConsoleUi.Main(args);
    

    【讨论】:

      【解决方案6】:

      如果您安装了 ReSharper,它应该能够检测到您的 [Test] 固定装置,并在要运行的每个方法的左侧放置一个图标,并在每个测试固定装置的左侧放置一个图标以运行所有方法。我更喜欢这种方式。

      大多数工作人员也有 TestDriven.NET,由于某种原因,它不在我的机器上,所以他们想知道发生了什么。有点意思。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-25
        • 1970-01-01
        • 2010-10-24
        • 2010-11-23
        • 2014-07-18
        相关资源
        最近更新 更多