Stepping through and debugging code in Unit tests

2019-03-11 14:37发布

问题:

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

    }
}

回答1:

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.



回答2:

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



回答3:

Yes you can, thank you :)

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



回答4:

If you were running nunit, that was so easy:

  1. Run nunit and open your desired assembly in it.
  2. Open visual studio -> Debug -> Attach to Process...
  3. Select process of nunit
  4. Put break point in each line you want.
  5. Go back to nunit and run tests
  6. You will see that execution stops at break points


回答5:

Maybe simply debugging tests and setting breakpoints works in some kinds of Unit tests but it doesn't if you debug e.g. 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



回答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 debug window open , chose the visual stdio



回答7:

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, VS tools, etc). Once installed you can right click on a function and choose Test With --> debugger.