如何在Visual Studio中以调试模式运行NUnit?

120

我最近在为我正在开发的一些C#代码构建一个测试框架。我已经设置好了NUnit,并在我的工作区内创建了一个新项目来测试组件。如果我从NUnit(v2.4)加载我的单元测试,一切都运行良好,但我现在想在调试模式下运行并设置一些断点。

我尝试了几个指南中的建议,这些指南都建议更改测试项目的“调试”属性:

Start external program: C:\Program Files\NUnit 2.4.8\bin\nunit-console.exe
Command line arguments: /assembly: <full-path-to-solution>\TestDSP\bin\Debug\TestDSP.dll

我正在使用控制台版本,但也尝试过调用 GUI。无论哪种方式,在我尝试开始调试时都会给我相同的错误:

Cannot start test project 'TestDSP' because the project does not contain any tests.
这是因为我通常在Nunit GUI中加载 \DSP.nunit,测试就在那里进行吗?
我开始觉得问题可能是因为VS想要运行自己的测试框架,这就是为什么它找不到NUnit测试的原因?
编辑:对于那些询问测试固件的人,我的TestDSP项目中的一个.cs文件大致如下:
namespace Some.TestNamespace
{
    // Testing framework includes
    using NUnit.Framework;

    [TestFixture]
    public class FirFilterTest
    {
        [Test]
        public void Test01_ConstructorTest()
        {
            ...some tests...
        }
    }
}

...我对C#和NUnit测试框架还比较陌生,所以很可能我错过了一些关键信息;-)

最终解决方案:这个大问题是由我使用的项目引起的。如果你选择 其他语言 -> Visual C# -> 测试 -> 测试项目 ...当你选择项目类型时,Visual Studio 将尝试使用它自己的测试框架。你应该选择一个普通的C#类库项目,然后按照我选定答案中的说明操作。


你的测试夹具类对我来说看起来没问题,所以肯定是项目中有问题,正如你所暗示的那样。 - Patrick McDonald
2
看起来这个问题很像:https://dev59.com/XXVC5IYBdhLWcg3wliKe答案也是一样的... - Patrick Desjardins
19个回答

2

如果您能够使控制台/或图形用户界面工作,但是断点没有被触发,可能是因为您的应用程序运行的是与 NUnit 不同的 .NET 运行时。请检查您的 nunit-console.exe.config / nunit.exe.config 是否指定了运行时。(配置文件与 nunit exe 文件位于同一目录中。)使用启动节点指定运行时:

<configuration>
    <startup>
       <supportedRuntime version="4.0" />
    </startup>

2
如果项目路径包含空格,例如在路径中有"New Project",则需要在启动选项-->命令行参数项目路径中用双引号括起来:<path>\bin\Debug\New Project\Quotes.Domain.Tests.dll。我花了很多时间才弄清楚这个问题。

1
关于 Patrick McDonald 先生所说的事情,
我的测试项目不是解决方案中的启动项目,所以我通过右键单击测试项目并选择“调试”-->“启动新实例”来运行我的测试。
我尝试申请我的测试类库,但遇到了一些关于路径的错误,所以我尝试去除了“命令行参数”,幸运的是它运行良好并符合预期。

0

对我来说,解决方案是调整nunit配置文件。为了在4.5-.Net框架和x64构建选项下使用nunit,我必须在启动标签(支持的运行时版本)中添加一行。

<startup useLegacyV2RuntimeActivationPolicy="true">
        <!-- Comment out the next line to force use of .NET 4.0 -->
        <supportedRuntime version="v4.0.30319" />
</startup>

之后,我可以通过右键单击Testproject Debug -> Start new instance来开始。 在此之前,我需要再次手动将项目附加到进程。
我的调试属性为: C:\Program Files (x86)\NUnit 2.6.4\bin\nunit.exe, 参数是要测试的.dll文件的位置。
更多信息:nunit for testing with .NET 4.0

0
我在使用MSTest时也遇到了同样的错误。在“测试输出”窗口中,我发现一些测试具有重复的ID,因此无法加载。我删除了所有重复的测试,现在可以在启动项目时运行测试了。

0
打开Visual Studio ---> 选择你的项目 ---> 选择“属性” ---> 选择“调试” ---> 选择“启动外部程序”,并设置你的NUnit路径(例如:启动外部程序 = C:\Program Files\NUnit 2.6.2\bin\nunit.exe) --->保存
设置完成后,只需点击“调试”即可。

0

听起来你正在尝试使用错误的库。如果你使用的dll不包含TestFixtures,那么NUnit就无法启动。

+1 推荐使用TestDriven.Net。我已经有多次使用它的机会了。 你可以根据http://testdriven.net/purchase_licenses.aspx上的许可证下载个人版本进行评估。


请查看最近的编辑 - 我有一个测试装置,尽管我完全有可能没有正确设置它。 - Jon Cage

0

现在也有一个扩展程序"Visual NUnit",它将允许您从 Visual Studio 中运行测试,就像内置的测试框架一样处理。查看它,它在扩展管理器中。


-2

看看这是否有帮助.. 如何在Visual Studio中添加NUnit

(RighteousRant)尽管我个人不喜欢这种方法..如果您需要在测试驱动代码时使用调试器,那么这是一种“异味”,因为您没有足够的信心/了解代码的工作原理,并且需要调试器告诉您。如果正确执行TDD,则无需调试器即可从中获得自由。仅在极少数情况下或在涉及其他人的代码时使用“附加调试器到NUNit”。


我尝试了那里的建议,但都没有用。你显然有很敏锐的嗅觉。我知道我的代码不起作用,因为我得到的第一个实现块的输出与我的测试参考答案相差甚远。所以现在我正在努力深入挖掘问题的原因。我宁愿在程序的其他部分隔离开来进行(因此需要在调试模式下运行单元测试)。值得一提的是,这是别人编写的代码,是从另一个人的算法转换而来的 :-/ - Jon Cage
那么这就属于我上一行的后一条款了 :) 不过奇怪的是你不能让它工作..太糟糕了。我建议只需附加到进程(Alt+D+P),不要纠结于此。 - Gishu
这里没有异味 - 我有一个在某些环境下失败的测试用例(返回非常错误的结果),我需要找出原因。为了做到这一点,我想要调试它并找出它在这个环境中失败的位置,以便我可以修复代码并使测试在任何地方都通过。这似乎是标准的红/绿类型的事情... - BrainSlugs83
@BrainSlugs83 - 很久没写这个了。我仍然反对将调试测试作为主要工作实践。边缘情况 - 我可以接受使用调试器。即使这样,我也可能首先插入日志语句。我认为这源于我观察到太多人使用代码崩溃-调试-调整循环,这个过程会被优化为带有连续调试器的代码崩溃-调整循环。 - Gishu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接