Tutoriel : créer une bibliothèque de classes .NET à l’aide de Visual Studio Code
Ce tutoriel montre comment automatiser les tests unitaires en ajoutant un projet de test à une solution.
Prérequis
- Ce tutoriel fonctionne avec la solution que vous avez créée dans Créer une bibliothèque de classes .NET à l’aide de Visual Studio.
Créer un projet de test unitaire
Les tests unitaires effectuent des tests logiciels automatisés pendant le développement et la publication. L’infrastructure de test que vous utilisez dans ce tutoriel est MSTest. MSTest est l’une des trois infrastructures de test parmi lesquelles vous pouvez choisir. Les autres sont xUnit et nUnit.
Démarrez Visual Studio Code.
Ouvrez la solution
ClassLibraryProjects
que vous avez créée dans Créer une bibliothèque de classes .NET à l’aide de Visual Studio.Créez un projet de test unitaire nommé « StringLibraryTest ».
dotnet new mstest -o StringLibraryTest
Le modèle de projet crée un fichier UnitTest1.cs avec le code suivant :
namespace StringLibraryTest; [TestClass] public class UnitTest1 { [TestMethod] public void TestMethod1() { } }
Le code source créé par le modèle de test unitaire effectue les opérations suivantes :
- Il applique l’attribut TestClassAttribute à la classe
UnitTest1
. - Il applique l’attribut TestMethodAttribute pour définir
TestMethod1
. - Il importe l’espace de noms Microsoft.VisualStudio.TestTools.UnitTesting, qui contient les types utilisés pour les tests unitaires. L’espace de noms est importé via une directive
global using
dans GlobalUsings.cs.
Chaque méthode marquée avec [TestMethod] dans une classe de test marquée avec [TestClass] est exécutée automatiquement lorsque le test unitaire est appelé.
- Il applique l’attribut TestClassAttribute à la classe
Ajoutez le projet de test à la solution.
dotnet sln add StringLibraryTest/StringLibraryTest.csproj
Ajouter une référence au projet
Pour que le projet de test fonctionne avec la classe StringLibrary
, ajoutez une référence dans le projet StringLibraryTest
au projet StringLibrary
.
Exécutez la commande suivante :
dotnet add StringLibraryTest/StringLibraryTest.csproj reference StringLibrary/StringLibrary.csproj
Ajouter et exécuter des méthodes de test unitaire
Lorsque Visual Studio exécute un test unitaire, il exécute chaque méthode marquée avec l’attribut TestMethodAttribute dans une classe marquée avec l’attribut TestClassAttribute. Une méthode de test se termine quand la première défaillance survient ou quand tous les tests contenus dans la méthode ont réussi.
Les tests les plus courants appellent des membres de la classe Assert. De nombreuses méthodes d’assertion incluent au moins deux paramètres, à savoir le résultat attendu pour le test et résultat réel du test. Certaines des méthodes les plus fréquemment appelées de la classe Assert
sont indiquées dans le tableau suivant :
Méthodes d’assertion | Fonction |
---|---|
Assert.AreEqual |
Vérifie que deux valeurs ou objets sont égaux. L’assertion échoue si les valeurs ou les objets ne sont pas égaux. |
Assert.AreSame |
Vérifie que deux variables d’objet référencent le même objet. L’assertion échoue si les variables font référence à des objets différents. |
Assert.IsFalse |
Vérifie qu’une condition est false . L’assertion échoue si la condition est true . |
Assert.IsNotNull |
Vérifie qu’un objet n’est pas null . L’assertion échouera si l’objet est null . |
Vous pouvez également utiliser la méthode Assert.ThrowsException dans une méthode de test pour indiquer le type d’exception qu’il est censé lever. Le test échoue si l’exception spécifiée n’est pas levée.
Dans le test de la méthode StringLibrary.StartsWithUpper
, vous voulez fournir une série de chaînes qui commencent par une majuscule. Vous attendez que la méthode retourne true
dans de tels cas, et vous pouvez donc appeler la méthode Assert.IsTrue. De même, vous voulez fournir des chaînes qui commencent par autre chose qu’un caractère majuscule. Vous attendez que la méthode retourne false
dans de tels cas, et vous pouvez donc appeler la méthode Assert.IsFalse.
Étant donné que votre méthode de bibliothèque gère les chaînes, vous souhaitez également vous assurer qu’elle gère correctement une chaîne vide (String.Empty
) et une chaîne null
. Une chaîne vide est une chaîne qui n’a pas de caractères et dont Length la valeur est 0. Une chaîne null
est une chaîne qui n’a pas été initialisée. Vous pouvez appeler StartsWithUpper
directement en tant que méthode statique et passer un seul argument String. Vous pouvez également appeler StartsWithUpper
en tant que méthode d’extension sur une variable string
affectée à null
.
Vous allez définir trois méthodes, chacune appelant une méthode Assert pour chaque élément d’un tableau de chaînes. Vous allez appeler une surcharge de méthode qui vous permet de spécifier un message d’erreur à afficher en cas d’échec du test. Le message identifie la chaîne qui a provoqué l’échec.
Pour créer les méthodes de test:
Ouvrez StringLibraryTest/UnitTest1.cs et remplacez tout le code par le code suivant.
using Microsoft.VisualStudio.TestTools.UnitTesting; using UtilityLibraries; namespace StringLibraryTest; [TestClass] public class UnitTest1 { [TestMethod] public void TestStartsWithUpper() { // Tests that we expect to return true. string[] words = { "Alphabet", "Zebra", "ABC", "Αθήνα", "Москва" }; foreach (var word in words) { bool result = word.StartsWithUpper(); Assert.IsTrue(result, string.Format("Expected for '{0}': true; Actual: {1}", word, result)); } } [TestMethod] public void TestDoesNotStartWithUpper() { // Tests that we expect to return false. string[] words = { "alphabet", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство", "1234", ".", ";", " " }; foreach (var word in words) { bool result = word.StartsWithUpper(); Assert.IsFalse(result, string.Format("Expected for '{0}': false; Actual: {1}", word, result)); } } [TestMethod] public void DirectCallWithNullOrEmpty() { // Tests that we expect to return false. string?[] words = { string.Empty, null }; foreach (var word in words) { bool result = StringLibrary.StartsWithUpper(word); Assert.IsFalse(result, string.Format("Expected for '{0}': false; Actual: {1}", word == null ? "<null>" : word, result)); } } }
Le test des caractères en majuscules de la méthode
TestStartsWithUpper
inclut la lettre majuscule grecque alpha (U+0391) et la lettre majuscule cyrillique EM (U+041C). Le test des caractères en minuscules dans la méthodeTestDoesNotStartWithUpper
inclut la lettre minuscule grecque alpha (U+03B1) et la lettre minuscule cyrillique Ghe (U+0433).Enregistrez vos modifications.
Exécutez les tests :
dotnet test StringLibraryTest/StringLibraryTest.csproj
La sortie du terminal indique que tous les tests ont réussi.
Starting test execution, please wait... A total of 1 test files matched the specified pattern. Passed! - Failed: 0, Passed: 3, Skipped: 0, Total: 3, Duration: 3 ms - StringLibraryTest.dll (net8.0)
Gérer les échecs des tests
Si vous effectuez un développement piloté par les tests (TDD), vous écrivez d’abord des tests et ils échouent la première fois que vous les exécutez. Ensuite, vous ajoutez du code à l’application, et le test réussit alors. Pour ce tutoriel, vous avez créé le test après avoir écrit le code de l’application qu’il valide, de sorte que vous n’avez pas vu le test échouer. Pour vérifier qu’un test échoue lorsque vous vous attendez à ce qu’il échoue, ajoutez une valeur non valide à l’entrée de test.
Modifiez le tableau
words
dans la méthodeTestDoesNotStartWithUpper
en y incluant la chaîne « Erreur ».string[] words = { "alphabet", "Error", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство", "1234", ".", ";", " " };
Exécutez les tests :
dotnet test StringLibraryTest/StringLibraryTest.csproj
La sortie du terminal indique qu’un test échoue et fournit un message d’erreur pour le test ayant échoué : « Assert.IsFalse a échoué. « Erreur » : false ; réel : True » était attendu ». En raison de l’échec, aucune chaîne du tableau après « Erreur » n’a été testée.
Starting test execution, please wait... A total of 1 test files matched the specified pattern. Failed TestDoesNotStartWithUpper [28 ms] Error Message: Assert.IsFalse failed. Expected for 'Error': false; Actual: True Stack Trace: at StringLibraryTest.UnitTest1.TestDoesNotStartWithUpper() in C:\ClassLibraryProjects\StringLibraryTest\UnitTest1.cs:line 33 Failed! - Failed: 1, Passed: 2, Skipped: 0, Total: 3, Duration: 31 ms - StringLibraryTest.dll (net5.0)
Supprimez la chaîne « Erreur » que vous avez ajoutée à l’étape 1. Réexécutez le test et les tests réussissent.
Tester la version Release de la bibliothèque
Maintenant que les tests ont tous réussi lors de l’exécution de la build Debug de la bibliothèque, exécutez les tests une fois supplémentaire sur la build Release de la bibliothèque. Un certain nombre de facteurs, notamment les optimisations du compilateur, peuvent parfois produire un comportement différent entre les versions Debug et Release.
Exécutez les tests avec la configuration de build de mise en production :
dotnet test StringLibraryTest/StringLibraryTest.csproj --configuration Release
Les tests réussissent.
Déboguer les tests
Si vous utilisez Visual Studio comme IDE, vous pouvez utiliser le même processus que celui présenté dans le Tutoriel : Déboguer une application console .NET à l’aide de Visual Studio pour déboguer du code à l’aide de votre projet de test unitaire. Au lieu de démarrer le projet d’application ShowCase, ouvrez StringLibraryTest/UnitTest1.cs, puis sélectionnez Déboguer tous les tests entre les lignes 7 et 8. Si vous ne le trouvez pas, appuyez sur Ctrl+Maj+P pour ouvrir la palette de commandes et entrez Recharger la fenêtre.
Visual Studio démarre le projet de test avec le débogueur attaché. L’exécution s’arrête aux points d’arrêt que vous avez ajoutés au projet de test ou au code de bibliothèque sous-jacent.
Ressources supplémentaires
Étapes suivantes
Dans ce tutoriel, vous avez effectué le test unitaire d’une bibliothèque de classes. Vous pouvez rendre la bibliothèque accessible à d’autres utilisateurs en la publiant sur NuGet en tant que package. Pour en savoir plus, suivez un tutoriel NuGet :
Si vous publiez une bibliothèque en tant que package NuGet, d’autres utilisateurs peuvent l’installer et l’utiliser. Pour en savoir plus, suivez un tutoriel NuGet :
Une bibliothèque ne doit pas nécessairement être distribuée en tant que package. Elle peut être proposée avec une application console qui l’utilise. Pour savoir comment publier une application console, consultez le tutoriel précédent de cette série :
Le kit de développement C# de l’extension Visual Studio Code fournit davantage d’outils pour le développement d’applications et de bibliothèques C# :
Ce tutoriel montre comment automatiser les tests unitaires en ajoutant un projet de test à une solution.
Prérequis
- Ce tutoriel fonctionne avec la solution que vous avez créée dans Créer une bibliothèque de classes .NET à l’aide de Visual Studio.
Créer un projet de test unitaire
Les tests unitaires effectuent des tests logiciels automatisés pendant le développement et la publication. L’infrastructure de test que vous utilisez dans ce tutoriel est MSTest. MSTest est l’une des trois infrastructures de test parmi lesquelles vous pouvez choisir. Les autres sont xUnit et nUnit.
Démarrez Visual Studio Code.
Ouvrez la solution
ClassLibraryProjects
que vous avez créée dans Créer une bibliothèque de classes .NET à l’aide de Visual Studio.Créez un projet de test unitaire nommé « StringLibraryTest ».
dotnet new mstest -o StringLibraryTest
Le modèle de projet crée un fichier UnitTest1.cs avec le code suivant :
using Microsoft.VisualStudio.TestTools.UnitTesting; namespace StringLibraryTest { [TestClass] public class UnitTest1 { [TestMethod] public void TestMethod1() { } } }
Le code source créé par le modèle de test unitaire effectue les opérations suivantes :
- Il importe l’espace de noms Microsoft.VisualStudio.TestTools.UnitTesting, qui contient les types utilisés pour les tests unitaires.
- Il applique l’attribut TestClassAttribute à la classe
UnitTest1
. - Il applique l’attribut TestMethodAttribute pour définir
TestMethod1
.
Chaque méthode marquée avec [TestMethod] dans une classe de test marquée avec [TestClass] est exécutée automatiquement lorsque le test unitaire est appelé.
Ajoutez le projet de test à la solution.
dotnet sln add StringLibraryTest/StringLibraryTest.csproj
Ajouter une référence au projet
Pour que le projet de test fonctionne avec la classe StringLibrary
, ajoutez une référence dans le projet StringLibraryTest
au projet StringLibrary
.
Exécutez la commande suivante :
dotnet add StringLibraryTest/StringLibraryTest.csproj reference StringLibrary/StringLibrary.csproj
Ajouter et exécuter des méthodes de test unitaire
Lorsque Visual Studio exécute un test unitaire, il exécute chaque méthode marquée avec l’attribut TestMethodAttribute dans une classe marquée avec l’attribut TestClassAttribute. Une méthode de test se termine quand la première défaillance survient ou quand tous les tests contenus dans la méthode ont réussi.
Les tests les plus courants appellent des membres de la classe Assert. De nombreuses méthodes d’assertion incluent au moins deux paramètres, à savoir le résultat attendu pour le test et résultat réel du test. Certaines des méthodes les plus fréquemment appelées de la classe Assert
sont indiquées dans le tableau suivant :
Méthodes d’assertion | Fonction |
---|---|
Assert.AreEqual |
Vérifie que deux valeurs ou objets sont égaux. L’assertion échoue si les valeurs ou les objets ne sont pas égaux. |
Assert.AreSame |
Vérifie que deux variables d’objet référencent le même objet. L’assertion échoue si les variables font référence à des objets différents. |
Assert.IsFalse |
Vérifie qu’une condition est false . L’assertion échoue si la condition est true . |
Assert.IsNotNull |
Vérifie qu’un objet n’est pas null . L’assertion échouera si l’objet est null . |
Vous pouvez également utiliser la méthode Assert.ThrowsException dans une méthode de test pour indiquer le type d’exception qu’il est censé lever. Le test échoue si l’exception spécifiée n’est pas levée.
Dans le test de la méthode StringLibrary.StartsWithUpper
, vous voulez fournir une série de chaînes qui commencent par une majuscule. Vous attendez que la méthode retourne true
dans de tels cas, et vous pouvez donc appeler la méthode Assert.IsTrue. De même, vous voulez fournir des chaînes qui commencent par autre chose qu’un caractère majuscule. Vous attendez que la méthode retourne false
dans de tels cas, et vous pouvez donc appeler la méthode Assert.IsFalse.
Étant donné que votre méthode de bibliothèque gère les chaînes, vous souhaitez également vous assurer qu’elle gère correctement une chaîne vide (String.Empty
) et une chaîne null
. Une chaîne vide est une chaîne qui n’a pas de caractères et dont Length la valeur est 0. Une chaîne null
est une chaîne qui n’a pas été initialisée. Vous pouvez appeler StartsWithUpper
directement en tant que méthode statique et passer un seul argument String. Vous pouvez également appeler StartsWithUpper
en tant que méthode d’extension sur une variable string
affectée à null
.
Vous allez définir trois méthodes, chacune appelant une méthode Assert pour chaque élément d’un tableau de chaînes. Vous allez appeler une surcharge de méthode qui vous permet de spécifier un message d’erreur à afficher en cas d’échec du test. Le message identifie la chaîne qui a provoqué l’échec.
Pour créer les méthodes de test:
Ouvrez StringLibraryTest/UnitTest1.cs et remplacez tout le code par le code suivant.
using Microsoft.VisualStudio.TestTools.UnitTesting; using UtilityLibraries; namespace StringLibraryTest; [TestClass] public class UnitTest1 { [TestMethod] public void TestStartsWithUpper() { // Tests that we expect to return true. string[] words = { "Alphabet", "Zebra", "ABC", "Αθήνα", "Москва" }; foreach (var word in words) { bool result = word.StartsWithUpper(); Assert.IsTrue(result, string.Format("Expected for '{0}': true; Actual: {1}", word, result)); } } [TestMethod] public void TestDoesNotStartWithUpper() { // Tests that we expect to return false. string[] words = { "alphabet", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство", "1234", ".", ";", " " }; foreach (var word in words) { bool result = word.StartsWithUpper(); Assert.IsFalse(result, string.Format("Expected for '{0}': false; Actual: {1}", word, result)); } } [TestMethod] public void DirectCallWithNullOrEmpty() { // Tests that we expect to return false. string?[] words = { string.Empty, null }; foreach (var word in words) { bool result = StringLibrary.StartsWithUpper(word); Assert.IsFalse(result, string.Format("Expected for '{0}': false; Actual: {1}", word == null ? "<null>" : word, result)); } } }
Le test des caractères en majuscules de la méthode
TestStartsWithUpper
inclut la lettre majuscule grecque alpha (U+0391) et la lettre majuscule cyrillique EM (U+041C). Le test des caractères en minuscules dans la méthodeTestDoesNotStartWithUpper
inclut la lettre minuscule grecque alpha (U+03B1) et la lettre minuscule cyrillique Ghe (U+0433).Enregistrez vos modifications.
Exécutez les tests :
dotnet test StringLibraryTest/StringLibraryTest.csproj
La sortie du terminal indique que tous les tests ont réussi.
Starting test execution, please wait... A total of 1 test files matched the specified pattern. Passed! - Failed: 0, Passed: 3, Skipped: 0, Total: 3, Duration: 3 ms - StringLibraryTest.dll (net7.0)
Gérer les échecs des tests
Si vous effectuez un développement piloté par les tests (TDD), vous écrivez d’abord des tests et ils échouent la première fois que vous les exécutez. Ensuite, vous ajoutez du code à l’application, et le test réussit alors. Pour ce tutoriel, vous avez créé le test après avoir écrit le code de l’application qu’il valide, de sorte que vous n’avez pas vu le test échouer. Pour vérifier qu’un test échoue lorsque vous vous attendez à ce qu’il échoue, ajoutez une valeur non valide à l’entrée de test.
Modifiez le tableau
words
dans la méthodeTestDoesNotStartWithUpper
en y incluant la chaîne « Erreur ».string[] words = { "alphabet", "Error", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство", "1234", ".", ";", " " };
Exécutez les tests :
dotnet test StringLibraryTest/StringLibraryTest.csproj
La sortie du terminal indique qu’un test échoue et fournit un message d’erreur pour le test ayant échoué : « Assert.IsFalse a échoué. « Erreur » : false ; réel : True » était attendu ». En raison de l’échec, aucune chaîne du tableau après « Erreur » n’a été testée.
Starting test execution, please wait... A total of 1 test files matched the specified pattern. Failed TestDoesNotStartWithUpper [28 ms] Error Message: Assert.IsFalse failed. Expected for 'Error': false; Actual: True Stack Trace: at StringLibraryTest.UnitTest1.TestDoesNotStartWithUpper() in C:\ClassLibraryProjects\StringLibraryTest\UnitTest1.cs:line 33 Failed! - Failed: 1, Passed: 2, Skipped: 0, Total: 3, Duration: 31 ms - StringLibraryTest.dll (net5.0)
Supprimez la chaîne « Erreur » que vous avez ajoutée à l’étape 1. Réexécutez le test et les tests réussissent.
Tester la version Release de la bibliothèque
Maintenant que les tests ont tous réussi lors de l’exécution de la build Debug de la bibliothèque, exécutez les tests une fois supplémentaire sur la build Release de la bibliothèque. Un certain nombre de facteurs, notamment les optimisations du compilateur, peuvent parfois produire un comportement différent entre les versions Debug et Release.
Exécutez les tests avec la configuration de build de mise en production :
dotnet test StringLibraryTest/StringLibraryTest.csproj --configuration Release
Les tests réussissent.
Déboguer les tests
Si vous utilisez Visual Studio comme IDE, vous pouvez utiliser le même processus que celui présenté dans le Tutoriel : Déboguer une application console .NET à l’aide de Visual Studio pour déboguer du code à l’aide de votre projet de test unitaire. Au lieu de démarrer le projet d’application ShowCase, ouvrez StringLibraryTest/UnitTest1.cs, puis sélectionnez Déboguer tous les tests entre les lignes 7 et 8. Si vous ne le trouvez pas, appuyez sur Ctrl+Maj+P pour ouvrir la palette de commandes et entrez Recharger la fenêtre.
Visual Studio démarre le projet de test avec le débogueur attaché. L’exécution s’arrête aux points d’arrêt que vous avez ajoutés au projet de test ou au code de bibliothèque sous-jacent.
Ressources supplémentaires
Étapes suivantes
Dans ce tutoriel, vous avez effectué le test unitaire d’une bibliothèque de classes. Vous pouvez rendre la bibliothèque accessible à d’autres utilisateurs en la publiant sur NuGet en tant que package. Pour en savoir plus, suivez un tutoriel NuGet :
Si vous publiez une bibliothèque en tant que package NuGet, d’autres utilisateurs peuvent l’installer et l’utiliser. Pour en savoir plus, suivez un tutoriel NuGet :
Une bibliothèque ne doit pas nécessairement être distribuée en tant que package. Elle peut être proposée avec une application console qui l’utilise. Pour savoir comment publier une application console, consultez le tutoriel précédent de cette série :
Ce tutoriel montre comment automatiser les tests unitaires en ajoutant un projet de test à une solution.
Prérequis
- Ce tutoriel fonctionne avec la solution que vous avez créée dans Créer une bibliothèque de classes .NET à l’aide de Visual Studio.
Créer un projet de test unitaire
Les tests unitaires effectuent des tests logiciels automatisés pendant le développement et la publication. L’infrastructure de test que vous utilisez dans ce tutoriel est MSTest. MSTest est l’une des trois infrastructures de test parmi lesquelles vous pouvez choisir. Les autres sont xUnit et nUnit.
Démarrez Visual Studio Code.
Ouvrez la solution
ClassLibraryProjects
que vous avez créée dans Créer une bibliothèque de classes .NET à l’aide de Visual Studio.Créez un projet de test unitaire nommé « StringLibraryTest ».
dotnet new mstest -f net6.0 -o StringLibraryTest
La commande
-f net6.0
modifie le framework cible par défaut à la versionnet6.0
.La commande
-o
ou--output
spécifie l’emplacement où placer la sortie générée.Le modèle de projet crée un fichier UnitTest1.cs avec le code suivant :
using Microsoft.VisualStudio.TestTools.UnitTesting; namespace StringLibraryTest { [TestClass] public class UnitTest1 { [TestMethod] public void TestMethod1() { } } }
Le code source créé par le modèle de test unitaire effectue les opérations suivantes :
- Il importe l’espace de noms Microsoft.VisualStudio.TestTools.UnitTesting, qui contient les types utilisés pour les tests unitaires.
- Il applique l’attribut TestClassAttribute à la classe
UnitTest1
. - Il applique l’attribut TestMethodAttribute pour définir
TestMethod1
.
Chaque méthode marquée avec [TestMethod] dans une classe de test marquée avec [TestClass] est exécutée automatiquement lorsque le test unitaire est appelé.
Ajoutez le projet de test à la solution.
dotnet sln add StringLibraryTest/StringLibraryTest.csproj
Ajouter une référence au projet
Pour que le projet de test fonctionne avec la classe StringLibrary
, ajoutez une référence dans le projet StringLibraryTest
au projet StringLibrary
.
Exécutez la commande suivante :
dotnet add StringLibraryTest/StringLibraryTest.csproj reference StringLibrary/StringLibrary.csproj
Ajouter et exécuter des méthodes de test unitaire
Lorsque Visual Studio exécute un test unitaire, il exécute chaque méthode marquée avec l’attribut TestMethodAttribute dans une classe marquée avec l’attribut TestClassAttribute. Une méthode de test se termine quand la première défaillance survient ou quand tous les tests contenus dans la méthode ont réussi.
Les tests les plus courants appellent des membres de la classe Assert. De nombreuses méthodes d’assertion incluent au moins deux paramètres, à savoir le résultat attendu pour le test et résultat réel du test. Certaines des méthodes les plus fréquemment appelées de la classe Assert
sont indiquées dans le tableau suivant :
Méthodes d’assertion | Fonction |
---|---|
Assert.AreEqual |
Vérifie que deux valeurs ou objets sont égaux. L’assertion échoue si les valeurs ou les objets ne sont pas égaux. |
Assert.AreSame |
Vérifie que deux variables d’objet référencent le même objet. L’assertion échoue si les variables font référence à des objets différents. |
Assert.IsFalse |
Vérifie qu’une condition est false . L’assertion échoue si la condition est true . |
Assert.IsNotNull |
Vérifie qu’un objet n’est pas null . L’assertion échouera si l’objet est null . |
Vous pouvez également utiliser la méthode Assert.ThrowsException dans une méthode de test pour indiquer le type d’exception qu’il est censé lever. Le test échoue si l’exception spécifiée n’est pas levée.
Dans le test de la méthode StringLibrary.StartsWithUpper
, vous voulez fournir une série de chaînes qui commencent par une majuscule. Vous attendez que la méthode retourne true
dans de tels cas, et vous pouvez donc appeler la méthode Assert.IsTrue. De même, vous voulez fournir des chaînes qui commencent par autre chose qu’un caractère majuscule. Vous attendez que la méthode retourne false
dans de tels cas, et vous pouvez donc appeler la méthode Assert.IsFalse.
Étant donné que votre méthode de bibliothèque gère les chaînes, vous souhaitez également vous assurer qu’elle gère correctement une chaîne vide (String.Empty
) et une chaîne null
. Une chaîne vide est une chaîne qui n’a pas de caractères et dont Length la valeur est 0. Une chaîne null
est une chaîne qui n’a pas été initialisée. Vous pouvez appeler StartsWithUpper
directement en tant que méthode statique et passer un seul argument String. Vous pouvez également appeler StartsWithUpper
en tant que méthode d’extension sur une variable string
affectée à null
.
Vous allez définir trois méthodes, chacune appelant une méthode Assert pour chaque élément d’un tableau de chaînes. Vous allez appeler une surcharge de méthode qui vous permet de spécifier un message d’erreur à afficher en cas d’échec du test. Le message identifie la chaîne qui a provoqué l’échec.
Pour créer les méthodes de test:
Ouvrez StringLibraryTest/UnitTest1.cs et remplacez tout le code par le code suivant.
using Microsoft.VisualStudio.TestTools.UnitTesting; using UtilityLibraries; namespace StringLibraryTest; [TestClass] public class UnitTest1 { [TestMethod] public void TestStartsWithUpper() { // Tests that we expect to return true. string[] words = { "Alphabet", "Zebra", "ABC", "Αθήνα", "Москва" }; foreach (var word in words) { bool result = word.StartsWithUpper(); Assert.IsTrue(result, string.Format("Expected for '{0}': true; Actual: {1}", word, result)); } } [TestMethod] public void TestDoesNotStartWithUpper() { // Tests that we expect to return false. string[] words = { "alphabet", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство", "1234", ".", ";", " " }; foreach (var word in words) { bool result = word.StartsWithUpper(); Assert.IsFalse(result, string.Format("Expected for '{0}': false; Actual: {1}", word, result)); } } [TestMethod] public void DirectCallWithNullOrEmpty() { // Tests that we expect to return false. string?[] words = { string.Empty, null }; foreach (var word in words) { bool result = StringLibrary.StartsWithUpper(word); Assert.IsFalse(result, string.Format("Expected for '{0}': false; Actual: {1}", word == null ? "<null>" : word, result)); } } }
Le test des caractères en majuscules de la méthode
TestStartsWithUpper
inclut la lettre majuscule grecque alpha (U+0391) et la lettre majuscule cyrillique EM (U+041C). Le test des caractères en minuscules dans la méthodeTestDoesNotStartWithUpper
inclut la lettre minuscule grecque alpha (U+03B1) et la lettre minuscule cyrillique Ghe (U+0433).Enregistrez vos modifications.
Exécutez les tests :
dotnet test StringLibraryTest/StringLibraryTest.csproj
La sortie du terminal indique que tous les tests ont réussi.
Starting test execution, please wait... A total of 1 test files matched the specified pattern. Passed! - Failed: 0, Passed: 3, Skipped: 0, Total: 3, Duration: 3 ms - StringLibraryTest.dll (net6.0)
Gérer les échecs des tests
Si vous effectuez un développement piloté par les tests (TDD), vous écrivez d’abord des tests et ils échouent la première fois que vous les exécutez. Ensuite, vous ajoutez du code à l’application, et le test réussit alors. Pour ce tutoriel, vous avez créé le test après avoir écrit le code de l’application qu’il valide, de sorte que vous n’avez pas vu le test échouer. Pour vérifier qu’un test échoue lorsque vous vous attendez à ce qu’il échoue, ajoutez une valeur non valide à l’entrée de test.
Modifiez le tableau
words
dans la méthodeTestDoesNotStartWithUpper
en y incluant la chaîne « Erreur ».string[] words = { "alphabet", "Error", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство", "1234", ".", ";", " " };
Exécutez les tests :
dotnet test StringLibraryTest/StringLibraryTest.csproj
La sortie du terminal indique qu’un test échoue et fournit un message d’erreur pour le test ayant échoué : « Assert.IsFalse a échoué. « Erreur » : false ; réel : True » était attendu ». En raison de l’échec, aucune chaîne du tableau après « Erreur » n’a été testée.
Starting test execution, please wait... A total of 1 test files matched the specified pattern. Failed TestDoesNotStartWithUpper [28 ms] Error Message: Assert.IsFalse failed. Expected for 'Error': false; Actual: True Stack Trace: at StringLibraryTest.UnitTest1.TestDoesNotStartWithUpper() in C:\ClassLibraryProjects\StringLibraryTest\UnitTest1.cs:line 33 Failed! - Failed: 1, Passed: 2, Skipped: 0, Total: 3, Duration: 31 ms - StringLibraryTest.dll (net5.0)
Supprimez la chaîne « Erreur » que vous avez ajoutée à l’étape 1. Réexécutez le test et les tests réussissent.
Tester la version Release de la bibliothèque
Maintenant que les tests ont tous réussi lors de l’exécution de la build Debug de la bibliothèque, exécutez les tests une fois supplémentaire sur la build Release de la bibliothèque. Un certain nombre de facteurs, notamment les optimisations du compilateur, peuvent parfois produire un comportement différent entre les versions Debug et Release.
Exécutez les tests avec la configuration de build de mise en production :
dotnet test StringLibraryTest/StringLibraryTest.csproj --configuration Release
Les tests réussissent.
Déboguer les tests
Si vous utilisez Visual Studio comme IDE, vous pouvez utiliser le même processus que celui présenté dans le Tutoriel : Déboguer une application console .NET à l’aide de Visual Studio pour déboguer du code à l’aide de votre projet de test unitaire. Au lieu de démarrer le projet d’application ShowCase, ouvrez StringLibraryTest/UnitTest1.cs, puis sélectionnez Déboguer tous les tests entre les lignes 7 et 8. Si vous ne le trouvez pas, appuyez sur Ctrl+Maj+P pour ouvrir la palette de commandes et entrez Recharger la fenêtre.
Visual Studio démarre le projet de test avec le débogueur attaché. L’exécution s’arrête aux points d’arrêt que vous avez ajoutés au projet de test ou au code de bibliothèque sous-jacent.
Ressources supplémentaires
Étapes suivantes
Dans ce tutoriel, vous avez effectué le test unitaire d’une bibliothèque de classes. Vous pouvez rendre la bibliothèque accessible à d’autres utilisateurs en la publiant sur NuGet en tant que package. Pour en savoir plus, suivez un tutoriel NuGet :
Si vous publiez une bibliothèque en tant que package NuGet, d’autres utilisateurs peuvent l’installer et l’utiliser. Pour en savoir plus, suivez un tutoriel NuGet :
Une bibliothèque ne doit pas nécessairement être distribuée en tant que package. Elle peut être proposée avec une application console qui l’utilise. Pour savoir comment publier une application console, consultez le tutoriel précédent de cette série :