我最近一直在构建一个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.
这是因为我通常会将\ DSP.nunit加载到Nunit GUI并且那是测试所在的位置吗?
我开始认为问题可能是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测试框架都很陌生,所以我完全有可能错过了一些重要的信息; - )
最终解决方案:最大的问题是我用过的项目。如果您选择Other Languages -> Visual C# -> Test -> Test Project
...当您选择项目类型时,Visual Studio将尝试使用它自己的测试框架,据我所知。您应该选择普通 C#类库项目,然后我选择的答案中的说明将起作用。
答案 0 :(得分:100)
当我需要调试我的NUnit测试时,我只需使用“Debug | Attach to Process”连接到NUnit GUI应用程序nunit-agent.exe
并从GUI运行测试。我的测试中的任何断点(或他们正在测试的代码)都会被击中。我误解了你的问题,还是会对你有用?
答案 1 :(得分:45)
我使用与尝试Jon相同的技术,没有/ assembly标志,即
Start External Program: C:\Program Files\NUnit 2.4.8\bin\nunit.exe
Command line arguments: "<path>\bin\Debug\Quotes.Domain.Tests.dll"
TestDSP.dll是否包含所有TestFixtures?
由于我的测试项目不是解决方案中的启动项目,我通过右键单击测试项目并选择Debug - &gt;来运行我的测试。启动新实例
答案 2 :(得分:21)
只需删除看起来像
的行<ProjectTypeGuids>
{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
</ProjectTypeGuids>
来自您的项目文件。 这条线基本上告诉VS.Net它是一个测试项目,因此“无法启动测试项目”。仅在这里,第一个Guid说“这是一个测试”,第二个说“它是C#”。 有关这些Guids的信息:http://www.mztools.com/Articles/2008/MZ2008017.aspx
答案 3 :(得分:18)
除了@Justin提供的答案之外,还有NUnit 2.6的更多细节。
使用NUnit 2.6附加到nunit.exe或nunit-console.exe而不是代理。 @Justin注意到的配置略有不同。以下是nunit.exe.config中的示例(对于nunit-console.exe.config也是如此)。
<startup useLegacyV2RuntimeActivationPolicy="true">
<!-- Comment out the next line to force use of .NET 4.0 -->
<supportedRuntime version="v2.0.50727" />
<supportedRuntime version="v4.0.30319" />
</startup>
对于.NET 4测试项目,要获得分数点击,您必须注释掉或删除评论建议的v2.0行。一旦我这样做,我就能够调试.NET 4.0测试项目。
答案 4 :(得分:17)
如果您使用的是NUnit 2.4或更新版本,则可以在SetUpFixture
课程中添加以下代码。 (您可以使用旧版本执行此操作,但您需要执行与SetUpFixture
相同的任何操作,或将其复制到测试本身。)
[SetUpFixture]
public class SetupFixtureClass
{
[SetUp]
public void StartTesting()
{
System.Diagnostics.Debugger.Launch();
}
}
Debugger.Launch()
的作用是在单击“在NUnit中运行”时显示以下对话框。
然后在项目打开时选择正在运行的visual studio实例(我的屏幕截图中的第二个),然后将附加调试器,并在Visual Studio中显示任何断点或异常。
答案 5 :(得分:10)
在Nunit 3.0.1(我使用VS2013)中,从主菜单打开&gt;测试&gt; Windows&gt;测试浏览器。然后在&#34;测试资源管理器&#34;中,右键单击测试用例,您可能会看到:
希望这有帮助。
答案 6 :(得分:6)
尝试NUnitit - 一个用于调试NUnit测试用例的开源Visual Studio Addin
答案 7 :(得分:6)
安装TestDriven.NET,这是Visual Studio的插件
从那里,您可以右键单击您的单元测试程序集并单击Run Tests运行整个套件,右键单击TestFixture类以仅运行该类中的测试,或者右键单击Test方法以仅运行该测试方法
如果需要在调试模式下断点测试,还可以选择Test With Debugger。
答案 8 :(得分:5)
从项目文件中删除ProjectTypeGuids。
答案 9 :(得分:3)
现在有图片:
File -> Open Project
答案 10 :(得分:2)
如果项目路径包含空格,例如路径<path>\bin\Debug\New Project\Quotes.Domain.Tests.dll
中的“新项目”随后包含“开始选项” - &gt;命令行参数以双引号显示项目路径。
我花了很多时间来解决这个问题。
答案 11 :(得分:2)
如果您能够使控制台/或GUI工作,但您的断点没有被击中,可能是因为您的应用运行的是与NUnit不同的.NET运行时。检查你的nunit-console.exe.config / nunit.exe.config是否指定了运行时。(这些配置与nunit exe的目录位于同一目录。)使用启动节点指定运行时:
<configuration>
<startup>
<supportedRuntime version="4.0" />
</startup>
答案 12 :(得分:1)
关于Patrick McDonald先生所说的话
由于我的测试项目不是解决方案中的启动项目,我通过右键单击测试项目并选择Debug - &gt;来运行我的测试。启动新实例
我试图申请我的测试类库但是在路径上遇到了一些错误,所以我试图删除'命令行参数',幸运的是它运行良好并且符合预期。
答案 13 :(得分:0)
听起来你正在尝试使用错误的库。 NUnit只能在您使用的dll包含TestFixtures时启动。
TestDriven.Net上的+1。我有机会多次使用它。 您可以根据http://testdriven.net/purchase_licenses.aspx的许可下载个人版本以进行评估。
答案 14 :(得分:0)
我和MSTest有同样的错误。我发现在测试输出窗口中,某些测试具有重复的ID,无法加载。我删除了所有重复的测试,现在我可以在启动项目时运行测试。
答案 15 :(得分:0)
现在还有一个扩展“Visual NUnit”,它允许您从Visual Studio中运行测试,就像构建测试框架句柄一样。在扩展管理器中查看它。
答案 16 :(得分:0)
打开Visual Studio ---&gt;你的项目---&gt;选择“属性”---&gt;选择“调试” - &gt;选择“启动外部程序”并在那里设置NUnit的路径(例如:启动外部程序= C:\ Program Files \ NUnit 2.6.2 \ bin \ nunit.exe)----&gt;保存
设置完成后,只需单击Debug
答案 17 :(得分:0)
对我来说,解决方案是适应nunit配置文件。要将nunit与4.5-.Net框架和x64构建选项一起使用,我必须在启动标记中添加一行(支持的运行时版本)。
<startup useLegacyV2RuntimeActivationPolicy="true">
<!-- Comment out the next line to force use of .NET 4.0 -->
<supportedRuntime version="v4.0.30319" />
</startup>
之后,我可以通过右键单击Testproject Debug - &gt;开始。开始新实例。 在此之前,我需要再次手动将项目附加到流程中。
我的调试属性是, C:\ Program Files(x86)\ NUnit 2.6.4 \ bin \ nunit.exe 使用.dll的位置参数进行测试。
答案 18 :(得分:-1)
看看这有帮助.. How to add NUnit in Visual Studio
(RighteousRant)虽然我个人不喜欢这种方法..如果您在测试驱动代码时需要调试器,那就是“气味”,因为您没有足够的信心/知道如何你的代码工作&amp;需要调试器告诉你。如果做得好,TDD应该让你免于需要调试器。使用'将调试程序附加到NUNit'仅在极少数情况下或当您涉及其他人的代码时。