simonc
simonc

Reputation: 42165

Debugging tests running under NUnit

I have a .NET 4.0 C# solution with a tests project which runs unit tests under NUnit. The NUnit binaries are v3.5.

I can run the tests perfectly well, but I can't set breakpoints and single step in Visual Studio. I'm guessing this is caused by the mismatch in .NET versions. Is there a way to single step through a v4.0 tests assembly using NUnit for v3.5?

Upvotes: 14

Views: 12581

Answers (5)

Weeble
Weeble

Reputation: 17890

The problem is that unless you tell it otherwise, NUnit will spawn a subprocess to run tests when it determines it necessary. If you watch it in Process Explorer, you can see that "nunit-console.exe"* spawns "nunit-agent.exe"*. The Visual Studio debugger doesn't automatically attach to child processes.

In this case, I believe the version mismatch is why it chooses to start a subprocess. The easiest way to work around this is to edit "nunit-console.exe.config"* to change the set of <supportedRuntime> values. There should already be a comment there marking the line that you should comment out in order to force it to run as .NET 4.0:

<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>

Once you change that, the first NUnit process will already be .NET 4.0 and it shouldn't need to spawn a subprocess. If you want to be sure, specify /process=Single and NUnit will either run in a single process or fail immediately if it cannot.

* - If you need to use the x86 versions, substitute:

nunit-console.exe        -> nunit-console-x86.exe
nunit-agent.exe          -> nunit-agent-x86.exe
nunit-console.exe.config -> nunit-console-x86.exe.config

Upvotes: 28

Glen
Glen

Reputation: 830

My answer is for another entire version of NUnit. However, for somebody like me, that is just discovering this I installed NUnit and NUnit Console via Manage NuGet Packages... (1st and 3rd option in the screenshot).

Enter image description here

And so I configured my test project properties Debug tab (see next screen shot below) in Visual Studio 2015 Community edition to run nunit3-console.exe which is found off your <solution>\packages folder that is automatically created when you install "NUnit Console" and for the arguments I added my test library DLL file and the commandline switches --wait (which prompts the developer to "Press any Key to Close", so it allows you see the result), and more importantly --inprocess that attaches your test library .NET code automatically so your break points are hit.

Enter image description here

Note to run the NUnit 3 console application, you set your test project as the start-up project.

Upvotes: 10

Trevor Pilley
Trevor Pilley

Reputation: 16393

Another option is to use http://testdriven.net/ to run your tests through Visual Studio. You can put a breakpoint on a test and right click → Run testsWith debugger.

Upvotes: 3

gprasant
gprasant

Reputation: 16023

ReSharper allows you to step through your Unit tests while debugging. But I don’t think you can do the same with Visual Studio. Try installing the trial version of ReSharper and then try to debug the tests.

Upvotes: 2

Matthew Strawbridge
Matthew Strawbridge

Reputation: 20600

I'm note sure about the console application, but you should find you can start the GUI version of NUnit manually and then attach to the nunit-agent process from the debugger in Visual Studio.

Upvotes: 2

Related Questions