Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Debugging tests running under NUnit

Tags:

c#

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?

like image 248
simonc Avatar asked Feb 15 '12 17:02

simonc


People also ask

What type of testing does NUnit support?

NUnit is an open-source unit testing framework for the . NET Framework and Mono. It serves the same purpose as JUnit does in the Java world, and is one of many programs in the xUnit family.


2 Answers

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
like image 80
Weeble Avatar answered Oct 13 '22 22:10

Weeble


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.

like image 20
Glen Avatar answered Oct 14 '22 00:10

Glen