61

I have not been able to debug or step through unit test.

Here is my sample test code...

using System;
using System.Text;
using System.Collections.Generic;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using DomainModel.Entities;
using DomainModel.Abstract;
using WebUI.Controllers;

namespace Tests
{
    [TestClass]
    public class PeopleControllerTests
    {

        static IPeopleRepository MockPeopleRepository(params Person[] people)
        {
            var mockPeopleRepos = new Moq.Mock<IPeopleRepository>();
            mockPeopleRepos.Setup(x => x.People).Returns(people.AsQueryable());
            return mockPeopleRepos.Object;
        }

        [TestMethod]

        public void Count_Of_People()
        {
            IPeopleRepository repository = MockPeopleRepository(
                new Person { Age = 31, Gender = "Male", Name = "Tom" },
                new Person { Age = 25, Gender = "Female", Name = "Sally" },
                new Person { Age = 18, Gender = "Female", Name = "John" }
                );

            PeopleController controller = new PeopleController(repository);
            var people = controller.List().ViewData.Model;
            var peoplelist = people as IList<Person>;
            Assert.AreEqual(3, peoplelist.Count);
        }

    }
}
Kiquenet
  • 14,494
  • 35
  • 148
  • 243
dotnet-practitioner
  • 13,968
  • 36
  • 127
  • 200

8 Answers8

107

When using Microsoft.VisualStudio.TestTools.UnitTesting, go to 'Test' in the main menu of VS 2010, click submenu 'Debug' -> 'tests in current context'.

Right-clicking on the test-code and selecting 'run tests' will never start the debugger, not even when mode = debug.

StayOnTarget
  • 11,743
  • 10
  • 52
  • 81
John
  • 1,086
  • 1
  • 8
  • 2
  • 5
    In `VS2012` We can do debug step by step by putting a `Break Point in a Specific Test Method`. After Go to `Menu > Test > Debug > Selected Tests Or All Test`. No you should able to debug. Just an Update :) – RajeshKdev May 23 '14 at 09:13
  • 2
    In addition to @RJK's comment, this is also the same steps for stepping through tests in VS 2013 (or use `Ctrl + T`) – Carrie Kendall Jul 24 '14 at 15:16
  • 1
    Hm. I don't understand the reasoning behind this workflow. A unit test project builds into a dll (not an exe), so it can't be set as a startup project; and yet, it only runs in Visual Studio, and it is "ran" (not linked against). So the "solution" is to have a completely different run / debugging setup? Just out of curiosity, why didn't Microsoft make unit tests build into an **application** instead of a dll, then reflect for test methods? This seems like a really odd workaround for not being able to really "run" a dll. – jrh Feb 26 '18 at 14:47
26

It's far simpler in Visual Studio 2013. In Test Explorer, select the tests you wish to debug, right-click, and choose debug selected tests.

Enter image description here

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
Mohamed Ali
  • 3,717
  • 1
  • 33
  • 39
  • Keep right-clicking and selecting Debug is very inconvenient. If I click the green triangle or press F5 with regular project, it starts debugging and stops at break points. Why should the behaviour be different for unit test projects? That is, why can't VS stop at the breakpoint when I pressed the green button with "Debug" selected in the drop-down? – Damn Vegetables Feb 07 '22 at 17:23
12

Yes you can, thank you :)

To actually break on them you need to run your unit tests in Debug mode though.

Grzenio
  • 35,875
  • 47
  • 158
  • 240
6

Another solution...

You need to run and attach the debugger.

Set this line at the first line executed in your test (maybe in the test class constructor):

System.Diagnostics.Debugger.Launch();

Then when the debug window is open, chose Visual Studio.

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
Arfilon
  • 131
  • 1
  • 2
4

If you were running NUnit, that was so easy:

  1. Run NUnit and open your desired assembly in it.
  2. Open Visual StudioDebugAttach to Process...
  3. Select the process of NUnit
  4. Put a breakpoint in each line you want.
  5. Go back to NUnit and run tests
  6. You will see that execution stops at breakpoints
Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
Afshar Mohebi
  • 10,479
  • 17
  • 82
  • 126
4

Maybe simply debugging tests and setting breakpoints works in some kinds of unit tests, but it doesn't if you debug, e.g., a Web service.

To debug a Web service (break inside a Unit test) you have to insert this code:

System.Diagnostics.Debugger.Break();

This will show a popup saying the application stopped working and you can choose to debug it.

More here: http://msdn.microsoft.com/en-us/library/ms243172.aspx#DebuggingOnCassini

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
Nux
  • 9,276
  • 5
  • 59
  • 72
3

Two simple steps to debug a unit test in Visual Studio:

  1. Set a breakpoint in the unit test that you want to debug
  2. Right click anywhere within the unit test and select "Debug Tests" from the context menu

Stepping through the unit test is very similar to how we step through any other code in Visual Studio.

  • Step Over - F10
  • Step Into - F11
  • Step Out = Shift + F11

You can also debug the unit test from the test explorer window

  1. First locate the unit test that you want to debug
  2. Double clicking on a unit test will open that unit test
  3. Set a break point in the unit test
  4. In the test explorer, right click on that unit test and select "Debug selected tests from the context menu"

To debug all the tests Click Test - Debug - All Tests The execution will then pause at all the break points in all the unit tests

One thing to keep in mind is that, the break points with in the unit tests will be ignored, if you select run tests instead of debug tests in visual studio.

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
akash mishra
  • 113
  • 1
  • 1
0

One option is to install TestDriven.net which makes it easier to run unit tests on any of the major unit testing .NET frameworks (NUnit, xUnit, Visual Studio tools, etc.).

Once installed, you can right click on a function and choose Test Withdebugger.

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
bkaid
  • 51,465
  • 22
  • 112
  • 128