Partager via


Procédure pas à pas : prise en charge du développement basé d'abord sur les tests avec la fonctionnalité Générer à partir de l'utilisation

Cette rubrique montre comment utiliser la fonctionnalité Générer à partir de l'utilisation, qui prend en charge le développement par test initial.

Dans le domaine de la conception logicielle, le développement par test initial est une approche qui consiste à écrire d'abord des tests unitaires selon des spécifications de produit, puis à écrire le code source requis pour garantir la réussite de ces tests.Visual Studio prend en charge le développement par test initial en générant de nouveaux types et membres dans le code source lorsque vous les référencez pour la première fois dans vos cas de test, avant qu'ils ne soient définis.

Visual Studio génère ces nouveaux types et membres en interrompant votre workflow au minimum.Vous pouvez créer des stubs pour les types, les méthodes, les propriétés, les champs ou les constructeurs sans quitter votre emplacement actuel dans le code.Lorsque vous ouvrez une boîte de dialogue afin de spécifier des options pour la génération de types puis que vous refermez cette boîte de dialogue, le focus retourne immédiatement sur le fichier qui est ouvert.

La fonctionnalité Générer à partir de l'utilisation peut être utilisée avec les infrastructures de test intégrées à Visual Studio.Cette rubrique décrit l'infrastructure de test unitaire Microsoft.

[!REMARQUE]

Il est possible que votre ordinateur affiche des noms ou des emplacements différents pour certains des éléments d'interface utilisateur de Visual Studio dans les instructions suivantes. L'édition de Visual Studio dont vous disposez et les paramètres que vous utilisez déterminent ces éléments. Pour plus d'informations, consultez Paramètres Visual Studio.

Pour créer un projet de bibliothèque de classes Windows et un projet de test

  1. Dans Visual C# ou Visual Basic, créez un projet de bibliothèque de classes Windows.Nommez-le GFUDemo_VB ou GFUDemo_CS, selon le langage que vous utilisez.

  2. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur l'icône de solution en haut, pointez sur Ajouter, puis cliquez sur Nouveau projet.Dans le volet Types de projets de la boîte de dialogue Nouveau projet, cliquez sur Test.

  3. Dans la modèles volet, cliquez sur Projet de Test unitaire et acceptez le nom par défaut de UnitTestProject1.L'illustration suivante présente la boîte de dialogue lorsqu'elle s'affiche dans Visual C#.La boîte de dialogue est identique dans Visual Basic.

    Boîte de dialogue Nouveau projet

    Boîte de dialogue Nouveau projet de test

  4. Cliquez sur OK pour fermer la boîte de dialogue Nouveau projet.Vous êtes maintenant prêt à commencer l'écriture des tests.

Pour générer une nouvelle classe à partir d'un test unitaire

  1. Le projet de test contient un fichier nommé UnitTest1.Double-cliquez sur ce fichier dans l'Explorateur de solutions pour l'ouvrir dans l'éditeur de code.Une classe de test et une méthode de test ont été générées.

  2. Recherchez la déclaration pour la classe UnitTest1 et renommez-la AutomobileTest.Dans C#, si vous trouvez un constructeur UnitTest1(), renommez-le AutomobileTest().

    [!REMARQUE]

    IntelliSense offre désormais deux possibilités pour la saisie semi-automatique des instructions IntelliSense : le mode de saisie semi-automatique et le mode de suggestion.Servez-vous du mode de suggestion pour les situations où les classes et les membres sont utilisés avant d'être définis.Après avoir ouvert une fenêtre IntelliSense, vous pouvez appuyer sur CTRL+ALT+ESPACE pour passer du mode de saisie semi-automatique au mode de suggestion.Consultez Utilisation de la fonctionnalité IntelliSense pour plus d'informations.Le mode de suggestion sera utile lorsque vous taperez Automobile à l'étape suivante.

  3. Localisez la méthode TestMethod1() et renommez-la DefaultAutomobileIsInitializedCorrectly().À l'intérieur de cette méthode, créez une nouvelle instance d'une classe nommée Automobile, comme indiqué dans les illustrations suivantes.Une ligne ondulée s'affiche pour indiquer une erreur de compilation et une balise active apparaît sous le nom de type.L'emplacement exact de la balise active varie, selon que vous utilisez Visual Basic ou Visual C#.

    Visual Basic

    Soulignement de balise active en Visual Basic

    Visual C#

    Soulignement de balise active en C#

  4. Placez le pointeur de la souris sur la balise active pour afficher le message d'erreur indiquant qu'aucun type nommé Automobile n'est encore défini.Cliquez sur la balise active ou appuyez sur CTRL+.(CTRL+point) pour ouvrir le menu contextuel Générer à partir de l'utilisation, comme indiqué dans les illustrations suivantes.

    Visual Basic

    Menu contextuel de balise active en Visual Basic

    Visual C#

    Menu contextuel de balise active en C#

  5. Vous avez maintenant deux choix.Vous pouvez cliquer sur Générer 'Class Automobile' pour créer un fichier dans votre projet de test et le remplir avec une classe vide nommée Automobile.Cette méthode permet de créer rapidement une classe contenant les modificateurs d'accès par défaut dans un nouveau fichier du projet actuel.Vous pouvez également cliquer sur Générer un nouveau type pour ouvrir la boîte de dialogue Générer un nouveau type.Elle fournit des options qui permettent notamment de placer la classe dans un fichier existant et d'ajouter le fichier à un autre projet.

    Cliquez sur Générer un nouveau type pour ouvrir la boîte de dialogue Générer un nouveau type, présentée dans l'illustration suivante.Dans la liste Projet, cliquez sur GFUDemo_VB ou sur GFUDemo_CS pour indiquer à Visual Studio d'ajouter le fichier au projet de code source au lieu du projet de test.

    Boîte de dialogue Générer un nouveau type

    Boîte de dialogue Générer un nouveau type

  6. Cliquez sur OK pour fermer la boîte de dialogue et créer le fichier.

  7. Dans l'Explorateur de solutions, regardez sous le nœud du projet GFUDemo_VB ou GFUDemo_CS pour vérifier qu'il contient le nouveau fichier Automobile.vb ou Automobile.cs.Dans l'éditeur de code, c'est encore AutomobileTest.DefaultAutomobileIsInitializedCorrectly qui a le focus.Vous pouvez continuer à écrire votre test avec un minimum d'interruption.

Pour générer un stub de propriété

  • Supposez que la spécification de produit déclare que la classe Automobile comporte deux propriétés publiques nommées Model et TopSpeed.Ces propriétés doivent être initialisées avec les valeurs par défaut "Not specified" et -1 par le constructeur par défaut.Le test unitaire suivant vérifiera que le constructeur par défaut attribue correctement les valeurs par défaut aux propriétés.

    Ajoutez la ligne de code suivante à DefaultAutomobileIsInitializedCorrectly.

    Assert.IsTrue((myAuto.Model = "Not specified") And (myAuto.TopSpeed = -1))
    
    Assert.IsTrue((myAuto.Model == "Not specified") && (myAuto.TopSpeed == -1));
    

    Étant donné que le code référence deux propriétés non définies sur Automobile, une balise active apparaît.Cliquez sur la balise active de Model, puis sur Générer le stub de propriété.Générez également un stub de propriété pour la propriété TopSpeed.

    Dans la classe Automobile, les types des nouvelles propriétés sont correctement déduits du contexte.

    L'illustration suivante présente le menu contextuel des balises actives.

    Visual Basic

    Menu contextuel Générer la propriété en Visual Basic

    Visual C#

    Menu contextuel Générer la propriété en C#

Pour rechercher le code source

  • Utilisez la fonctionnalité Naviguer vers pour naviguer jusqu'au fichier de code source Automobile.cs ou Automobile.vb afin de vérifier que les nouvelles propriétés ont été générées.

    La fonctionnalité Naviguer vers vous permet d'entrer rapidement une chaîne de texte (telle qu'un nom de type ou la partie d'un nom) et d'accéder à l'emplacement souhaité en cliquant sur l'élément dans la liste des résultats.

    Ouvrez la boîte de dialogue Naviguer vers en cliquant dans l'éditeur de code et en appuyant sur CTRL+, (CTRL+virgule).Dans la zone de texte, tapez automobile.Cliquez sur la classe Automobile dans la liste, puis cliquez sur OK.

    La fenêtre Naviguer vers est présentée dans l'illustration suivante.

    Fenêtre Naviguer vers

    Boîte de dialogue Naviguer vers

Pour générer un stub pour un nouveau constructeur

  1. Dans cette méthode de test, vous allez générer un stub de constructeur qui initialisera les propriétés Model et TopSpeed avec les valeurs que vous aurez spécifiées.Vous allez ensuite ajouter du code supplémentaire pour compléter le test.Ajoutez cette autre méthode de test à votre classe AutomobileTest.

    <TestMethod()> Public Sub AutomobileWithModelNameCanStart()
        Dim model As String = "Contoso"
        Dim topSpeed As Integer = 199
        Dim myAuto As New Automobile(model, topSpeed)
    End Sub
    
    [TestMethod]
    public void AutomobileWithModelNameCanStart()
    {
        string model = "Contoso";
        int topSpeed = 199;
        Automobile myAuto = new Automobile(model, topSpeed);
    }
    
  2. Cliquez sur la balise active sous le nouveau constructeur de classe, puis sur Générer le stub de constructeur.Dans le fichier de classe Automobile, notez que le nouveau constructeur a examiné les noms des variables locales utilisées dans l'appel de constructeur, identifié des propriétés ayant des noms similaires dans la classe Automobile et fourni le code dans le corps du constructeur pour stocker les valeurs d'argument dans les propriétés Model et TopSpeed.(Dans Visual Basic, les champs _topSpeed et _model du nouveau constructeur sont les champs de stockage implicitement définis pour les propriétés Model et TopSpeed.)

  3. Une fois le nouveau constructeur généré, une ligne ondulée s'affiche sous l'appel au constructeur par défaut dans DefaultAutomobileIsInitializedCorrectly.Le message d'erreur déclare que la classe Automobile ne comporte aucun constructeur qui n'accepte pas d'arguments.Pour générer un constructeur explicite par défaut qui est dépourvu de paramètres, cliquez sur la balise active, puis sur Générer le stub de constructeur.

Pour générer un stub pour une méthode

  1. Supposez que la spécification déclare qu'un nouvel Automobile peut passer à l'état En cours d'exécution si ses propriétés Model et TopSpeed ont des valeurs autres que celles par défaut.Ajoutez les lignes suivantes à la méthode AutomobileWithModelNameCanStart.

    myAuto.Start()
    Assert.IsTrue(myAuto.IsRunning = True)
    
    myAuto.Start();
    Assert.IsTrue(myAuto.IsRunning == true);
    
  2. Cliquez sur la balise active pour l'appel de méthode myAuto.Start, puis sur Générer un stub de méthode.

  3. Cliquez sur la balise active de la propriété IsRunning, puis sur Générer le stub de propriété.La classe Automobile contient maintenant le code suivant.

    Public Class Automobile
        Sub New(ByVal model As String, ByVal topSpeed As Integer)
            _model = model
            _topSpeed = topSpeed
        End Sub
        Sub New()
            ' TODO: Complete member initialization 
        End Sub
    
        Property Model() As String
        Property TopSpeed As Integer
        Property IsRunning As Boolean
        Sub Start()
            Throw New NotImplementedException
        End Sub
    End Class
    
    public class Automobile
    {
        public string Model { get; set; }
        public int TopSpeed { get; set; }
    
        public Automobile(string model, int topSpeed)
        {
            this.Model = model;
            this.TopSpeed = topSpeed;
        }
    
        public Automobile()
        {
            // TODO: Complete member initialization
        }
    
        public void Start()
        {
            throw new NotImplementedException();
        }
    
        public bool IsRunning { get; set; }
    }
    

Pour exécuter les tests

  1. Sur le Test unitaire , pointez sur Exécuter les Tests unitaires, puis cliquez sur Tous les Tests.Cette commande exécute tous les tests dans toutes les infrastructures de test écrites pour la solution actuelle.

    Dans ce cas, il existe deux tests, et tous les deux échouent comme prévu.Le test DefaultAutomobileIsInitializedCorrectly échoue car la condition Assert.IsTrue retourne la valeur False.Le test AutomobileWithModelNameCanStart échoue car la méthode Start dans la classe Automobile lève une exception.

    La fenêtre Résultats des tests est présentée dans l'illustration suivante.

    Fenêtre Résultats des tests

    Résultats des tests qui ont échoué

  2. Dans la fenêtre Résultats des tests, double-cliquez sur chaque ligne de résultat des tests pour accéder à l'emplacement de chaque échec du test.

Pour implémenter le code source

  1. Ajoutez le code suivant au constructeur par défaut afin que les propriétés Model, TopSpeed et IsRunning soient toutes correctement initialisées à leurs valeurs par défaut "Not specified", -1 et True (true).

    Sub New()
        Model = "Not specified"
        TopSpeed = -1
        IsRunning = True
    End Sub
    
    public Automobile()
    {
        this.Model = "Not specified";
        this.TopSpeed = -1;
        this.IsRunning = true;
    }
    
  2. Lorsque la méthode Start est appelée, elle doit attribuer la valeur True à l'indicateur IsRunning uniquement si les propriétés Model ou TopSpeed ont une valeur autre que celle par défaut.Supprimez le NotImplementedException du corps de la méthode et ajoutez le code suivant.

    Sub Start()
        If Model <> "Not specified" Or TopSpeed <> -1 Then
            IsRunning = True
        Else
            IsRunning = False
        End If
    End Sub
    
    public void Start()
    {
        if (this.Model != "Not specified" || this.TopSpeed != -1)
            this.IsRunning = true;
        else
            this.IsRunning = false;
    }
    

Pour exécuter de nouveaux tests

  • Dans le menu Test, pointez sur Exécuter, puis cliquez sur Tous les tests de la solution.Cette fois-ci, les tests réussissent.La fenêtre Résultats des tests est présentée dans l'illustration suivante.

    Fenêtre Résultats des tests

    Résultats des tests qui ont réussi

Voir aussi

Concepts

Générer à partir de l'utilisation

Vérification du code à l'aide de tests unitaires

Autres ressources

Écriture de code dans l'éditeur de code et de texte

Utilisation de la fonctionnalité IntelliSense