20
votes

I have a problem debugging an NUnit test from VisualStudio. I created an empty project (Console Application), then I added references to the NUnit library and wrote a simple test.

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);
        }
    }
}

Next I followed the advice given in this link How do I run NUnit in debug mode from Visual Studio? but none of the solutions in that topic work for me. None of my breakpoints are hit while performing the test. I tried testing the solution by attaching to the process and also by running the project with an external program with arguments.

What can I do to debug my unit test?

5
Are you saying you're attaching to the nunit.exe process, run the tests in the nunit IDE but your breakpoints are not getting hit?Martin Haluza
Is it possibly that NUnit is trying to run under a different framework version? Try the following links: stackoverflow.com/q/3542904/13188 and stackoverflow.com/q/930438/13188Pedro
I got it working with the answer I posted here: stackoverflow.com/questions/13348613/…tobsen

5 Answers

41
votes

Running or debugging NUnit tests directly with Visual Studio

Look ma' no extensions!

Simply configure your test project so that when you hit F5 (Start debugging) or Ctrl-F5 (Start without debugging) it will automatically start NUnit GUI and execute all tests within it. If any breakpoints get hit, you will also be able to simply debug your test code.

A step-by-step guide with images shows you exactly how to do it.

Laziness is the mother of all invention :-)

13
votes

Assuming you're using a version of Visual Studio other than Express Edition then TestDriven.NET might be of use.

After installing it

  1. Set a breakpoint within your test method
  2. Right click and choose Debugger from the Test With menu
  3. The debugger should launch and hit your breakpoint

Unfortunately you can't use this method with Express editions of visual studio because TestDriven.NET is a plugin for visual studio and the Express editions do not support the use of plugins

Running a test within a console app

You can also run a test in the debugger via a console application:

  1. Create a new console application
  2. Reference your unit tests project
  3. Inside the Main method of the console application create a new instance of your test fixuture and then call one of the test methods. For example if I have a fixture named MyTests and a test named Test1 I'd write:

    var myTests = new MyTests();
    myTests.Test1();
    
  4. Set a breakpoint at the line where you create an instance of the MyTests class and press F5

  5. The debugger will hit your breakpoint and then you can use F11 to step into your TestFixture's constructor, or step over that into the test itself
5
votes

If you are using NUnit 2.4 you can put the following code in your SetUpFixture class. (You can do this with older versions but you will need to do whatever equivalent that has to the SetUpFixture, or copy it in to the test itself.)

[SetUpFixture]
public class SetupFixtureClass
{
    [SetUp]
    public void StartTesting()
    {
        System.Diagnostics.Debugger.Launch();
    }
}

What Debugger.Launch() does is cause the following dialog to show up when you click Run inside NUnit.

JIT Debugger Dialog

You then choose your running instance of visual studio with your project open (the 2nd one in my screenshot) then the debugger will be attached and any breakpoints or exceptions will show up in Visual Studio.

0
votes

Have a look at NHarness on CodePlex.

It's a very simple, reflection based, test runner library, that recognises NUnit attributes, and can be run from a project within Visual Studio Express, allowing debug testing.

It currently has a test class level granularity, but method level calls are, supposedly, going to be added soon.

0
votes

Had the same problem with NUnit 2.5.3, and eventually found a different solution. See if this works for you:

Open NUnit GUI and go into Tools menu Settings... dialog. Select Assembly Isolation subsection of Test Loader section in Settings tree. Set the Default Process Model to Run tests dierctly in the NUnit process.

I had it set to Run tests in a single seperate process, which is why the debugger could not link my dll under test to the symbols for debugging it. I am still using Use a sperate AppDomain per Assembly for my Default Domain Usage.