Procédure pas à pas : 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é Generate From Usage , qui prend en charge le développement basé d’abord sur les tests.
Ledéveloppement basé d’abord sur les tests est une approche de conception logicielle dans laquelle vous écrivez d’abord des tests unitaires basés sur des spécifications de produits, puis vous écrivez le code source nécessaire pour que les tests réussissent. Visual Studio prend en charge le développement basé d’abord sur les tests en générant de nouveaux types et membres dans le code source lorsque vous y faites référence pour la première fois dans vos cas de test, avant de les définir.
Visual Studio génère les nouveaux types et membres avec une interruption minimale de votre flux de travail. Vous pouvez créer des stubs pour des types, méthodes, propriétés, champs ou constructeurs sans quitter votre emplacement actuel dans le code. Quand vous ouvrez une boîte de dialogue pour spécifier des options de génération de type, le fichier ouvert actuellement récupère immédiatement le focus lorsque la boîte de dialogue se ferme.
Vous pouvez utiliser la fonctionnalité Générer à partir de l’utilisation avec des frameworks de test qui s’intègrent à Visual Studio. Dans cette rubrique, nous allons utiliser l’infrastructure de test unitaire Microsoft.
Notes
Dans cet article, il est possible que votre ordinateur affiche des noms ou des emplacements différents pour certains éléments de l’interface utilisateur Visual Studio. Vous utilisez peut-être une autre édition de Visual Studio ou d'autres paramètres d'environnement. Pour plus d’informations, consultez Personnaliser l’IDE.
Créer un projet de bibliothèque de classes Windows et un projet de test
En C# ou en Visual Basic, créez un projet Bibliothèque de classes Windows. Nommez-le
GFUDemo_VB
ouGFUDemo_CS
, selon le langage que vous utilisez.Dans l’Explorateur de solutions, cliquez avec le bouton droit sur l’icône de solution en haut, choisissez Ajouter>Nouveau projet.
Créez un Projet de test unitaire (.NET Framework).
Ajouter une référence au projet de bibliothèque de classes
Dans l’Explorateur de solutions, sous votre projet de test unitaire, cliquez avec le bouton droit sur l’entrée Références, puis choisissez Ajouter une référence.
Dans la boîte de dialogue Gestionnaire de références, sélectionnez Projets, puis sélectionnez le projet de bibliothèque de classes.
Choisissez OK pour fermer la boîte de dialogue Gestionnaire de références.
Enregistrez votre solution. Vous êtes maintenant prêt à commencer l’écriture des tests.
Générer une nouvelle classe à partir d’un test unitaire
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.
Recherchez la déclaration de classe
UnitTest1
et renommez-laAutomobileTest
.Notes
IntelliSense offre désormais deux options pour la saisie semi-automatique des instructions IntelliSense : le mode de saisie semi-automatique et le mode de suggestion. Utilisez le mode de suggestion quand les classes et les membres sont utilisés avant d’être définis. Quand une fenêtre IntelliSense est ouverte, vous pouvez appuyer sur Ctrl+Alt+Barre d’espace pour basculer entre le mode de complétion et le mode de suggestion. Pour plus d’informations, consultez Utiliser IntelliSense. Le mode de suggestion sera utile lorsque vous taperez
Automobile
à l’étape suivante.Recherchez la méthode
TestMethod1()
et renommez-laDefaultAutomobileIsInitializedCorrectly()
. Dans cette méthode, créez une instance d’une classe nomméeAutomobile
, comme illustré dans les captures d’écran suivantes. Un soulignement ondulé apparaît pour signaler une erreur de compilation. Une ampoule d’erreur Actions rapides apparaît dans la marge de gauche ou directement sous le soulignement ondulé si vous pointez dessus.Choisissez l’ampoule Actions rapides ou cliquez sur celle-ci. Un message d’erreur s’affiche, indiquant que le type
Automobile
n’est pas défini. Des solutions vous sont également proposées.Cliquez sur Générer un nouveau type pour ouvrir la boîte de dialogue Générer un type. Cette boîte de dialogue fournit des options, notamment pour générer le type dans un autre projet.
Dans la liste Projet, cliquez sur GFUDemo_VB ou GFUDemo_CS pour indiquer à Visual Studio d’ajouter le fichier au projet de bibliothèque de classes plutôt qu’au projet de test. S’il n’est pas déjà sélectionné, choisissez Créer un fichier et nommez-le Automobile.cs ou Automobile.vb.
Cliquez sur OK pour fermer la boîte de dialogue et créer le fichier.
Dans l’Explorateur de solutions, regardez sous le nœud du projet GFUDemo_VB ou GFUDemo_CS pour vérifier que le nouveau fichier Automobile.vb ou Automobile.cs s’y trouve. Dans l’éditeur de code, le focus est toujours dans
AutomobileTest.DefaultAutomobileIsInitializedCorrectly
, ce qui vous permet de continuer à écrire votre test avec un minimum d’interruption.
Générer un stub de propriété
Supposez que la spécification de produit indique que la classe Automobile
a 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érifie que le constructeur par défaut affecte les valeurs par défaut correctes aux propriétés.
Ajoutez la ligne de code suivante à la méthode de test
DefaultAutomobileIsInitializedCorrectly
.Du fait que le code fait référence à deux propriétés non définies sur
Automobile
, une ligne ondulée s’affiche sousModel
etTopSpeed
. Pointez surModel
et choisissez l’ampoule d’erreur Actions rapides, puis choisissez Générer la propriété « Automobile.Model ».Générez un stub pour la propriété
TopSpeed
de la même façon.Dans la classe
Automobile
, les types des nouvelles propriétés sont correctement déduits du contexte.
Générer un stub pour un nouveau constructeur
Maintenant, nous allons créer une méthode de test qui génère un stub de constructeur pour initialiser les propriétés Model
et TopSpeed
. Plus tard, vous ajouterez du code pour terminer le test.
Ajoutez la méthode de test supplémentaire suivante à votre classe
AutomobileTest
.Cliquez sur l’ampoule d’erreur Actions rapides sous la ligne ondulée rouge, puis cliquez sur Générer un constructeur dans « Automobile ».
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, qu’il a identifié des propriétés ayant le même nom dans la classeAutomobile
et qu’il a fourni du code dans le corps du constructeur pour stocker les valeurs d’arguments dans les propriétésModel
etTopSpeed
.Une fois le nouveau constructeur généré, une ligne ondulée apparaît sous l’appel au constructeur par défaut dans
DefaultAutomobileIsInitializedCorrectly
. Le message d’erreur indique que la classeAutomobile
n’a aucun constructeur qui n’accepte aucun argument. Pour générer un constructeur explicite par défaut sans aucun paramètre, cliquez sur l’ampoule d’erreur Actions rapides, puis cliquez sur Générer un constructeur dans « Automobile ».
Générer un stub pour une méthode
Supposez que la spécification stipule qu’un nouvel élément Automobile
peut être placé dans l’état IsRunning
si ses propriétés Model
et TopSpeed
ont des valeurs autres que les valeurs par défaut.
Ajoutez les lignes suivantes à la méthode
AutomobileWithModelNameCanStart
.Cliquez sur l’ampoule d’erreur Actions rapides pour l’appel de la méthode
myAuto.Start
, puis cliquez sur Générer une méthode « Automobile.Start ».Cliquez sur l’ampoule Actions rapides pour la propriété
IsRunning
, puis cliquez sur Générer la propriété « Automobile.IsRunning ».La classe
Automobile
contient maintenant une méthode nomméeStart()
et une propriété nomméeIsRunning
.
Exécuter les tests
Dans le menu Test, choisissez Exécuter>Tous les tests.
La commande Exécuter>Tous les tests exécute tous les tests dans tous les frameworks de tests écrits pour la solution active. Il y a ici deux tests, qui échouent comme prévu. Le test
DefaultAutomobileIsInitializedCorrectly
échoue car la conditionAssert.IsTrue
retourneFalse
. Le testAutomobileWithModelNameCanStart
échoue car la méthodeStart
dans la classeAutomobile
lève une exception.La fenêtre Résultats des tests est illustrée ci-dessous.
Dans la fenêtre Résultats des tests, double-cliquez sur chaque ligne de résultat de test pour accéder à l’emplacement de chaque test.
Implémenter le code source
Ajoutez le code suivant au constructeur par défaut pour que les propriétés
Model
,TopSpeed
etIsRunning
soient toutes initialisées à leurs valeurs par défaut"Not specified"
,-1
etFalse
(oufalse
pour C#).Quand la méthode
Start
est appelée, elle doit affecter la valeur true à l’indicateurIsRunning
uniquement si les propriétésModel
ouTopSpeed
ont des valeurs autres que leurs valeurs par défaut. SupprimezNotImplementedException
du corps de la méthode et ajoutez le code suivant.
Réexécuter des tests
Dans le menu Test, pointez sur Exécuter, puis cliquez sur Tous les tests.
Cette fois-ci, les tests réussissent. La fenêtre Résultats des tests est illustrée ci-dessous.