如何在Visual Studio 2010中调试Nunit测试
我在调试VisualStudio的NUnit测试时遇到问题。 我创建了一个空项目(控制台应用程序),然后我添加了对NUnit库的引用并编写了一个简单的测试。
namespace ReimplementingLinq.Tests { [TestFixture] public class WhereTest { [Test] public void SimpleFiltering() { int[] source = { 1, 2, 3, 4, 2, 8, 1 }; var result = source.Where(val => val < 4); int[] expected = {1,2,3,4}; CollectionAssert.AreEqual(expected, result); } } }
接下来我遵循此链接中给出的建议如何从Visual Studio以调试模式运行NUnit? 但是那个主题的解决方案都不适合我。 执行测试时,没有任何断点被击中。 我尝试通过附加到流程并使用带参数的外部程序运行项目来测试解决方案。
我该怎么做才能调试我的unit testing?
假设您使用的是Visual Studio以外的Visual Studio版本,则可能会使用TestDriven.NET 。
安装后
- 在测试方法中设置断点
- 右键单击并从Test With菜单中选择Debugger
- 调试器应该启动并命中你的断点
遗憾的是,您无法将此方法用于Visual Studio的Express版本,因为TestDriven.NET是Visual Studio的插件,而Express版本不支持使用插件
在控制台应用程序中运行测试
您还可以通过控制台应用程序在调试器中运行测试:
- 创建一个新的控制台应用程
- 参考您的unit testing项目
-
在控制台应用程序的Main方法内部,创建测试fixuture的新实例,然后调用其中一个测试方法。 例如,如果我有一个名为MyTests的夹具和一个名为Test1的测试,我会写:
var myTests = new MyTests(); myTests.Test1();
-
在创建
MyTests
类实例的行处设置断点,然后按F5 - 调试器将命中你的断点,然后你可以使用F11进入你的TestFixture的构造函数,或者将其转入测试本身
直接使用Visual Studio运行或调试NUnit测试
看马’没有扩展名!
只需配置您的测试项目,以便在按F5 (开始调试)或Ctrl-F5 (无需调试时启动)时,它将自动启动NUnit GUI并执行其中的所有测试。 如果遇到任何断点,您也可以简单地调试测试代码。
带图像的分步指南向您展示了如何操作。
懒惰是所有发明的母亲 🙂
如果您使用的是NUnit 2.4,则可以将以下代码放入SetUpFixture
类中。 (您可以使用旧版本执行此操作,但您需要执行与SetUpFixture
相同的任何操作,或将其复制到测试本身。)
[SetUpFixture] public class SetupFixtureClass { [SetUp] public void StartTesting() { System.Diagnostics.Debugger.Launch(); } }
Debugger.Launch()
所做的是在单击NUnit内部运行时显示以下对话框。
然后,在项目打开的情况下选择正在运行的visual studio实例(我的屏幕截图中的第二个),然后将附加调试器,并且任何断点或exception都将显示在Visual Studio中。
看看CodePlex上的NHarness 。
它是一个非常简单,基于reflection的测试运行器库,可识别NUnit属性,并且可以从Visual Studio Express中的项目运行,从而允许进行调试测试。
它目前具有测试类级别的粒度,但据推测,方法级调用将很快添加。
与NUnit 2.5.3有同样的问题,并最终找到了不同的解决方案。 看看这是否适合你:
打开NUnit GUI并进入“工具”菜单“设置…”对话框。 在Settings树中选择Test Loader部分的Assembly Isolation子部分。 在NUnit进程中将Default Process Model设置为Dexctly。
我将它设置为在单个单独的进程中运行测试,这就是为什么调试器无法将我测试的dll链接到用于调试它的符号。 我仍然使用每个程序集使用一个sperate AppDomain作为我的默认域使用。