58 votes

Parcourir et déboguer du code dans les tests unitaires

Je n'ai pas pu déboguer ou pas à travers le test unitaire.

Voici mon code de test d'exemple...

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();
            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;
            Assert.AreEqual(3, peoplelist.Count);
        }

    }
}

3 votes

Vous voulez dire, en plus de cliquer à droite de la ligne, ou clic droit sur le point d'arrêt -> insérer un point d'arrêt ?

102voto

John Points 986

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

En cliquant avec le bouton droit sur le code de test et en sélectionnant 'exécuter les tests', le débogueur ne démarrera jamais, même en mode = débogage.

5 votes

Dans VS2012, nous pouvons effectuer un débogage pas à pas en plaçant un point d'arrêt dans une méthode de test spécifique. Ensuite, allez à Menu > Test > Debug > Tests sélectionnés ou tous les tests. Maintenant, vous devriez pouvoir déboguer. Juste une mise à jour :)

2 votes

En plus du commentaire de @RJK, voici également les mêmes étapes pour parcourir les tests dans VS 2013 (ou utilisez Ctrl + T)

1 votes

Hm. Je ne comprends pas le raisonnement derrière ce flux de travail. Un projet de test unitaire se compile dans une dll (pas un exe), donc il ne peut pas être défini comme projet de démarrage ; et pourtant, il ne s'exécute que dans Visual Studio, et il est "exécuté" (pas lié contre). Donc la "solution" est d'avoir une configuration run / debugging complètement différente ? Juste par curiosité, pourquoi Microsoft n'a pas fait en sorte que les tests unitaires se compilent dans une application au lieu d'une dll, puis reflètent pour les méthodes de test ? Cela semble être un contournement vraiment étrange pour ne pas pouvoir vraiment "exécuter" une dll.

25voto

Mohamed Selim Points 1522

C'est beaucoup plus simple dans Visual Studio 2013. Dans l'Explorateur de tests, sélectionnez les tests que vous souhaitez déboguer, cliquez avec le bouton droit et choisissez de déboguer les tests sélectionnés.

Entrez la description de l'image ici

0 votes

Continuez à faire un clic droit et sélectionnez le débogage est très gênant. Si je clique sur le triangle vert ou appuie sur F5 avec un projet régulier, il commence le débogage et s'arrête aux points d'arrêt. Pourquoi le comportement devrait-il être différent pour les projets de tests unitaires ? Autrement dit, pourquoi Visual Studio ne peut-il pas s'arrêter au point d'arrêt lorsque j'ai appuyé sur le bouton vert avec "Débogage" sélectionné dans le menu déroulant?

12voto

Grzenio Points 16802

Oui, vous pouvez, merci :)

Pour réellement les interrompre, vous devez exécuter vos tests unitaires en mode Debug.

6 votes

Menu > Test > Déboguer > Tests dans le contexte actuel (Ctrl + R, Ctrl + T dans VS 2010)

0 votes

Cette réponse manque de détails suffisants. Pouvez-vous fournir des instructions spécifiques? Est-ce différent des autres réponses?

5voto

Une autre solution...

Vous devez exécuter et attacher le débogueur.

Placez 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();

Ensuite, lorsque la fenêtre de débogage est ouverte, choisissez Visual Studio.

3 votes

Pourquoi avez-vous répondu à un message datant de 4 ans avec une réponse pratiquement identique à une autre réponse ?

4voto

afsharm Points 2726

Si vous utilisiez NUnit, c'était tellement facile :

  1. Exécutez NUnit et ouvrez votre assembly désiré.
  2. Ouvrez Visual StudioDebugAttacher au processus...
  3. Sélectionnez le processus de NUnit
  4. Placez un point d'arrêt à chaque ligne souhaitée.
  5. Retournez à NUnit et lancez les tests
  6. Vous verrez que l'exécution s'arrête aux points d'arrêt

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X