web-dev-qa-db-fra.com

Traverser et déboguer le code dans les tests unitaires

Je n'ai pas pu déboguer ni passer par le test unitaire.

Voici mon exemple de code de test ...

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

    }
}
46

Lorsque vous utilisez Microsoft.VisualStudio.TestTools.UnitTesting, allez dans 'Test' dans le menu principal de VS 2010, cliquez sur le sous-menu 'Debug' -> 'tests dans le contexte actuel'.

Cliquer avec le bouton droit sur le code de test et sélectionner "exécuter les tests" ne démarrera jamais le débogueur, pas même lorsque mode = debug.

84
John

C'est beaucoup plus simple dans VS 2013, dans Test Explorer, sélectionnez les tests que vous souhaitez déboguer, cliquez avec le bouton droit et choisissez déboguer les tests sélectionnés.

enter image description here

20
Mohamed Selim

Oui, merci :)

Pour réellement les casser, vous devez cependant exécuter vos tests unitaires en mode débogage.

12
Grzenio

Peut-être que le débogage de tests et la définition de points d'arrêt fonctionnent dans certains types de tests unitaires, mais ce n'est pas le cas si vous déboguez, par exemple Service Web.

Pour déboguer un service Web (interrompre un test unitaire), vous devez insérer ce code:

System.Diagnostics.Debugger.Break();

Cela affichera une fenêtre contextuelle indiquant que l'application a cessé de fonctionner et que vous pouvez choisir de la déboguer.

Plus ici: http://msdn.Microsoft.com/en-us/library/ms243172.aspx#DebuggingOnCassini

4
Nux

Une autre solution...

Vous devez exécuter et attacher le débogueur

Définissez cette ligne à la première ligne exécutée dans votre test (peut-être dans le constructeur de la classe de test)

System.Diagnostics.Debugger.Launch();

puis lorsque la fenêtre de débogage est ouverte, choisissez le stdio visuel

4
Arfilon

Si vous exécutiez nunit, c'était si simple:

  1. Exécutez nunit et ouvrez-y l'assembly souhaité.
  2. Ouvrez Visual Studio -> Debug -> Attach to Process ...
  3. Sélectionnez le processus de nunit
  4. Mettez le point d'arrêt dans chaque ligne que vous voulez.
  5. Revenez à nunit et exécutez les tests
  6. Vous verrez que l'exécution s'arrête aux points d'arrêt
4
Afshar Mohebbi

Une option consiste à installer TestDriven.net qui facilite l'exécution de tests unitaires sur l'un des principaux frameworks de test unitaire .net (nunit, xunit, VS tools, etc.). Une fois installé, vous pouvez cliquer avec le bouton droit sur une fonction et choisir Tester avec -> débogueur.

0
bkaid