调试NUnit测试的最佳方法是什么?

时间:2008-11-08 10:59:02

标签: c# visual-studio-2008 nunit

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

我的代码在一个项目中有一个解决方案,我的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 获得更好的建议而无需支付额外的插件,我感谢您的建议。

6 个答案:

答案 0 :(得分:3)

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

以下是我already say on SO

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

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

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:2)

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

这是一种享受。

答案 3 :(得分:0)

在我的商店,我们正如你那样做。在缺点方面,这意味着设置可能与NUnit完全不同。从好的方面来说,这样做非常简单,并且可以创建一个最小的环境来重现错误。

答案 4 :(得分:0)

  

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

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

NUnit.ConsoleRunner.ConsoleUi.Main(args);

答案 5 :(得分:0)

如果安装了ReSharper,它应该能够检测到[Test]灯具并在每个方法的左侧放置一个图标来运行,并在每个测试夹具的左侧运行全部。我更喜欢这种方式。

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