我在调试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);
}
}
}
接下来,我按照此链接中的建议进行操作 How do I run NUnit in debug mode from Visual Studio?但该主题中没有一个解决方案适合我。执行测试时没有遇到任何断点。我尝试通过附加到流程以及使用带参数的外部程序运行项目来测试解决方案。
我可以做些什么来调试我的单元测试?
答案 0 :(得分:41)
只需配置您的测试项目,以便当您点击 F5 (开始调试)或 Ctrl-F5 (无需调试启动)时,它将自动启动NUnit GUI并执行所有操作在其中进行测试。如果遇到任何断点,您也可以简单地调试测试代码。
step-by-step guide with images向您展示了如何操作。
懒惰是所有发明的母亲: - )
答案 1 :(得分:13)
假设您使用的是Visual Studio以外版本的Visual Studio,那么TestDriven.NET可能会有用。
安装后
遗憾的是,您不能将此方法用于Visual Studio的Express版本,因为TestDriven.NET是Visual Studio的插件,Express版本不支持使用插件
您还可以通过控制台应用程序在调试器中运行测试:
在控制台应用程序的Main方法中,创建测试fixuture的新实例,然后调用其中一个测试方法。例如,如果我有一个名为MyTests的夹具和一个名为Test1的测试,我会写:
var myTests = new MyTests();
myTests.Test1();
在创建MyTests
类实例的行设置断点,然后按F5
答案 2 :(得分:5)
如果您使用的是NUnit 2.4,则可以在SetUpFixture
课程中输入以下代码。 (您可以使用旧版本执行此操作,但您需要执行与SetUpFixture
相同的任何操作,或将其复制到测试本身。)
[SetUpFixture]
public class SetupFixtureClass
{
[SetUp]
public void StartTesting()
{
System.Diagnostics.Debugger.Launch();
}
}
Debugger.Launch()
的作用是在单击“在NUnit中运行”时显示以下对话框。
然后在项目打开时选择正在运行的visual studio实例(我的屏幕截图中的第二个),然后将附加调试器,并在Visual Studio中显示任何断点或异常。
答案 3 :(得分:0)
这是一个非常简单,基于反射的测试运行器库,可识别NUnit属性,可以从Visual Studio Express中的项目运行,允许进行调试测试。
它目前具有测试类级别的粒度,但据推测,方法级调用很快就会被添加。
答案 4 :(得分:0)
与NUnit 2.5.3有同样的问题,并最终找到了不同的解决方案。看看这是否适合你:
打开NUnit GUI并进入“工具”菜单“设置...”对话框。在Settings树中选择Test Loader部分的Assembly Isolation子部分。在NUnit进程中将Default Process Model设置为Dexctly。
我将它设置为在单个单独的进程中运行测试,这就是调试器无法将我测试的dll链接到用于调试它的符号的原因。我仍在使用每个程序集使用一个sperate AppDomain作为我的默认域使用。