Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de changer d’annuaire.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de changer d’annuaire.
Ce tutoriel vous guide tout au long d’une expérience interactive qui crée un exemple de solution pas à pas pour apprendre les concepts de test unitaire. Si vous préférez suivre le didacticiel à l’aide d’une solution prédéfinie, afficher ou télécharger l’exemple de code avant de commencer. Pour obtenir des instructions de téléchargement, consultez Exemples et didacticiels.
Cet article concerne le test d’un projet .NET Core. Si vous testez un projet ASP.NET Core, consultez tests d’intégration dans ASP.NET Core.
Création du projet source
Ouvrez une fenêtre shell. Créez un répertoire appelé unit-testing-vb-mstest pour contenir la solution.
Dans ce nouveau répertoire, exécutez dotnet new sln pour créer une solution. Cette pratique facilite la gestion de la bibliothèque de classes et du projet de test unitaire.
Dans le répertoire de solution, créez un répertoire PrimeService. Vous disposez jusqu’à présent du répertoire et de la structure de fichiers suivants :
/unit-testing-vb-mstest
unit-testing-vb-mstest.sln
/PrimeService
Créez PrimeService le répertoire actif et exécutez dotnet new classlib -lang VB pour créer le projet source. Renommez Class1.VB en PrimeService.VB. Vous créez une implémentation défaillante de la classe PrimeService :
Namespace Prime.Services
Public Class PrimeService
Public Function IsPrime(candidate As Integer) As Boolean
Throw New NotImplementedException("Please create a test first")
End Function
End Class
End Namespace
Remplacez de nouveau le répertoire par le répertoire unit-testing-vb-using-mstest. Exécutez dotnet sln add .\PrimeService\PrimeService.vbproj pour ajouter le projet de bibliothèque de classes à la solution.
Création du projet de test
Ensuite, créez le répertoire PrimeService.Tests. Le plan suivant montre la structure de répertoires :
/unit-testing-vb-mstest
unit-testing-vb-mstest.sln
/PrimeService
Source Files
PrimeService.vbproj
/PrimeService.Tests
Créez le répertoire PrimeService.Tests le répertoire actif et créez un projet à l’aide de dotnet new mstest -lang VB. Cette commande crée un projet de test qui utilise MSTest comme bibliothèque de tests. Le modèle généré configure l’exécuteur de test dans PrimeServiceTests.vbproj:
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.5.0" />
<PackageReference Include="MSTest.TestAdapter" Version="1.1.18" />
<PackageReference Include="MSTest.TestFramework" Version="1.1.18" />
</ItemGroup>
Le projet de test nécessite d’autres packages pour créer et exécuter des tests unitaires. dotnet new à l’étape précédente a ajouté MSTest. À présent, ajoutez la bibliothèque de classes PrimeService comme autre dépendance au projet. Utilisez la commande dotnet reference add :
dotnet reference add ../PrimeService/PrimeService.vbproj
Vous pouvez voir l’intégralité du fichier dans le référentiel d’exemples sur GitHub.
Vous disposez de la disposition finale suivante de la solution :
/unit-testing-vb-mstest
unit-testing-vb-mstest.sln
/PrimeService
Source Files
PrimeService.vbproj
/PrimeService.Tests
Test Source Files
PrimeServiceTests.vbproj
Exécutez dotnet sln add .\PrimeService.Tests\PrimeService.Tests.vbproj dans le répertoire unit-testing-vb-mstest.
Création du premier test
Vous écrivez un test défaillant, faites-le passer, puis répétez le processus. Supprimez UnitTest1.vb du répertoire PrimeService.Tests et créez un fichier Visual Basic nommé PrimeService_IsPrimeShould.VB. Ajoutez le code suivant :
Imports Microsoft.VisualStudio.TestTools.UnitTesting
Namespace PrimeService.Tests
<TestClass>
Public Class PrimeService_IsPrimeShould
Private _primeService As Prime.Services.PrimeService = New Prime.Services.PrimeService()
<TestMethod>
Sub IsPrime_InputIs1_ReturnFalse()
Dim result As Boolean = _primeService.IsPrime(1)
Assert.IsFalse(result, "1 should not be prime")
End Sub
End Class
End Namespace
L’attribut <TestClass> indique une classe qui contient des tests. L’attribut <TestMethod> désigne une méthode exécutée par l’exécuteur de test. À partir du unit-testing-vb-mstest, exécutez dotnet test pour générer les tests et la bibliothèque de classes, puis exécutez les tests. L’exécuteur de test MSTest contient le point d’entrée du programme pour exécuter vos tests. dotnet test démarre l’exécuteur de test à l’aide du projet de test unitaire que vous avez créé.
Votre test échoue. Vous n’avez pas encore créé l’implémentation. Effectuez ce test en écrivant le code le plus simple dans la classe PrimeService qui fonctionne :
Public Function IsPrime(candidate As Integer) As Boolean
If candidate = 1 Then
Return False
End If
Throw New NotImplementedException("Please create a test first.")
End Function
Dans le répertoire unit-testing-vb-mstest, réexécutez dotnet test. La commande dotnet test exécute une build pour le projet PrimeService, puis pour le projet PrimeService.Tests. Après avoir généré les deux projets, il exécute ce test unique. Ça passe.
Ajout de fonctionnalités supplémentaires
Maintenant que vous avez passé un test, il est temps d’écrire plus. Il existe quelques autres cas simples pour les nombres premiers : 0, -1. Vous pouvez ajouter ces cas en tant que nouveaux tests avec l’attribut <TestMethod>, mais cela devient rapidement fastidieux. Il existe d’autres attributs MSTest qui vous permettent d’écrire une suite de tests similaires. Vous pouvez utiliser l’attribut <DataRow> avec <TestMethod> attribut pour spécifier des valeurs pour ces entrées.
Au lieu de créer de nouveaux tests, appliquez ces deux attributs pour créer une théorie unique. La théorie est une méthode qui teste plusieurs valeurs inférieures à deux, qui est le nombre premier le plus bas :
<TestClass>
Public Class PrimeService_IsPrimeShould
Private _primeService As Prime.Services.PrimeService = New Prime.Services.PrimeService()
<TestMethod>
<DataRow(-1)>
<DataRow(0)>
<DataRow(1)>
Sub IsPrime_ValuesLessThan2_ReturnFalse(value As Integer)
Dim result As Boolean = _primeService.IsPrime(value)
Assert.IsFalse(result, $"{value} should not be prime")
End Sub
<TestMethod>
<DataRow(2)>
<DataRow(3)>
<DataRow(5)>
<DataRow(7)>
Public Sub IsPrime_PrimesLessThan10_ReturnTrue(value As Integer)
Dim result As Boolean = _primeService.IsPrime(value)
Assert.IsTrue(result, $"{value} should be prime")
End Sub
<TestMethod>
<DataRow(4)>
<DataRow(6)>
<DataRow(8)>
<DataRow(9)>
Public Sub IsPrime_NonPrimesLessThan10_ReturnFalse(value As Integer)
Dim result As Boolean = _primeService.IsPrime(value)
Assert.IsFalse(result, $"{value} should not be prime")
End Sub
End Class
Exécutez dotnet test, et deux de ces tests échouent. Pour passer tous les tests, modifiez la clause if au début de la méthode :
if candidate < 2
Continuez à itérer en ajoutant d’autres tests, plus de théories et plus de code dans la bibliothèque principale. Vous disposez de la version terminée des tests et de l’implémentation complète de la bibliothèque.
Vous avez créé une petite bibliothèque et un ensemble de tests unitaires pour cette bibliothèque. Vous avez structuré la solution pour que l’ajout de nouveaux packages et tests fasse partie du flux de travail normal. Vous avez concentré la plupart de votre temps et votre effort sur la résolution des objectifs de l’application.