12

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

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

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

NUnit.ConsoleRunner.Runner.Main(args);

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

错误 1 ​​命名空间“NUnit.ConsoleRunner”中不存在类型或命名空间名称“Runner”(您是否缺少程序集引用?)

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

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

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 有任何更好的建议而无需支付额外的插件,我很感激您的建议。

4

6 回答 6

3

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

这是我在 SO 上已经说过的话

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

这样,您不需要每次都执行宏或任何操作,它只是一个普通的 F5 :)

于 2008-11-08T13:18:26.837 回答
2

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

这是一种享受。

于 2009-02-08T21:17:44.177 回答
2

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

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

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

于 2008-11-08T11:13:39.847 回答
0

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

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

于 2009-02-08T21:22:04.697 回答
0

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

于 2008-11-08T11:07:39.923 回答
0

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

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

NUnit.ConsoleRunner.ConsoleUi.Main(args);
于 2008-11-08T13:13:36.097 回答