Tests unitaires
Cet article pratique vous montre comment créer et exécuter des cas de test fiables.
Conditions préalables
Une expérience de développeur unifiée Power Platform doit être installée et configurée sur votre ordinateur local et un environnement de bac à sable axé sur le développeur Power Platform doit lui être lié. Il est important de conserver la même représentation cloud et locale du code (synchronisée).
Pour plus d’informations : Installer et configurer les outils de développement
Concepts clés
- Utiliser SysTest Framework pour créer un code de test unitaire/de composant
- Isolation de test
Utiliser SysTest Framework pour créer un code de test unitaire/de composant
Vous pouvez créer de nouveaux cas de test pour tester la fonctionnalité dans une application.
- Ouvrir Visual Studio.
- Dans le menu Fichier, sélectionnez Ouvrir>Projet/Solution, puis sélectionnez la solutionFleetManagement dans le dossier du bureau. Si le fichier de la solution ne se trouve pas sur votre ordinateur, les étapes pour le créer sont répertoriées dans Scénario de bout en bout pour l’exemple d’application Fleet Management.
- Dans l’Explorateur de solutions, cliquez avec le bouton droit sur la solution Fleet Management, sélectionnez Ajouter, puis sélectionnez Nouveau projet.
- Choisissez finances et opérations comme type de projet à créer.
- Nommez ce nouveau projet FleetManagementUnitTestSample, spécifiez le dossier FleetManagement sur le bureau (C:\Users\Public\Desktop\FleetManagement) comme emplacement, puis sélectionnez OK.
- Dans l’Explorateur de solutions, cliquez avec le bouton droit sur le nouveau projet, puis sélectionnez Propriétés.
- Définissez la propriété Modèle sur FleetManagementUnitTests, puis sélectionnez OK.
- Maintenant, ajoutez une classe de test contenant les tests pour le code Fleet Management. Cliquez avec le bouton droit sur le projet FleetManagementUnitTestSample, sélectionnez Ajouter, puis sélectionnez Nouvel élément.
- Dans la fenêtre Ajouter un nouvel élément, sélectionnez Classe de test comme type d’élément à ajouter. Nommez la nouvelle classe FMUnitTestSample, puis sélectionnez Ajouter.
La classe de modèle contient des informations qui devraient vous aider à commencer à écrire votre test. Dans cet exemple, la classe de test se compose uniquement de deux tests, chacun marqué avec l’attribut SysTestMethod. Comme les méthodes ne sont pas sujettes à l’extensibilité, elles ont été agrémentées d’un attribut Hookable(false)
. De plus, la classe de test contient une méthode appelée setup()
qui est appelée avant l’exécution d’un test. Cette méthode est souvent utile pour configurer un état partagé entre tous les tests.
class FMUnitTestSample extends SysTestCase
{
public void setup()
{
// Reset the test data to be sure things are clean
FMDataHelper::main(null);
}
[SysTestMethod, Hookable(false)]
public void testFMTotalsEngine()
{
FMRental rental;
FMTotalsEngine fmTotals;
FMRentalTotal fmRentalTotal;
FMRentalCharge rentalCharge;
FMRentalTotal expectedtotal;
str rentalID = '000022';
// Find a known rental
rental = FMRental::find(rentalID);
// Get the rental charges associated with the rental
// Data is seeded randomly, so this will change for each run
select sum(ExtendedAmount) from rentalCharge
where rentalCharge.RentalId == rental.RentalId;
fmTotals = FMTotalsEngine::construct();
fmTotals.calculateRentalVehicleRate(rental);
// Get the totals from the engine
fmRentalTotal = fmTotals.totals(rental);
// Set the expected amount
expectedTotal = rental.VehicleRateTotal + rentalCharge.ExtendedAmount;
this.assertEquals(expectedTotal,fmRentalTotal);
}
[SysTestMethod, Hookable(false)]
public void testFMCarValidateField()
{
FMCarClass fmCar;
fmCar.NumberOfDoors = -1;
this.assertFalse(fmCar.validateField(Fieldnum("FMCarClass", "NumberOfDoors")));
fmCar.NumberOfDoors = 4;
this.assertTrue(fmCar.validateField(Fieldnum("FMCarClass", "NumberOfDoors")));
}
}
Continuez en suivant ces instructions restantes.
- Enregistrez la classe de test.
- Générez le projet en cliquant avec le bouton droit sur le projet FleetManagementUnitTestSample dans l’Explorateur de solutions, puis sélectionnez Générer.
Après avoir résolu les problèmes diagnostiqués par le compilateur X++, vous êtes prêt à exécuter vos tests unitaires à l’aide de l’explorateur de tests Visual Studio. Dans l’expérience de développeur unifiée, l’exécution se produit dans le cloud sur les données qui résident dans le SQL Server en cours d’exécution. Vous devez donc déployer les résultats de votre compilation dans le cloud en procédant comme suit.
Sélectionnez l’élément de menu Déployer le modèle pour le projet FleetManagementUnitTests dans le menu contextuel du projet dans l’Explorateur de solutions. Vous êtes invité à vous connecter à Power Platform si vous n’êtes pas déjà connecté.
La boîte de dialogue de déploiement s’affiche. Comme nous n’avons ajouté aucune nouvelle table à synchroniser avec la base de données, nous effectuons maintenant l’étape de déploiement. Complétez la boîte de dialogue et choisissez Déployer.
Dans le menu Tester de Visual Studio, ouvrez l’Explorateur de tests.
Sélectionnez Exécuter le test sélectionné pour exécuter dans le cloud les deux méthodes de test du cas de test. Notez que nous ne prenons actuellement pas en charge le menu de débogage dans l’Explorateur de tests.
L’Explorateur de tests affiche les résultats de chaque test une fois terminé. Avec un peu de chance, tous vos tests ont réussi. Si ce n’est pas le cas, vous pouvez utiliser l’Explorateur de tests pour accéder au code de test concerné.
Isolation de test
Pour qu’un test ait une grande valeur, il doit être fiable. Un test doit réussir ou échouer de manière cohérente, indépendamment d’autres facteurs comme d’autres tests. Une cause typique de tests non fiables est l’état de fuite, par exemple les données laissées dans la base de données qui influencent les tests en aval. Une autre cause de tests non fiables est de se baser sur des tests qui doivent être appelés dans un ordre particulier. Pour éviter ce type de problème, vous pouvez utiliser l’attribut SysTestTransaction
.
TestTransactionMode | Description |
---|---|
AutoRollback | Par défaut. Fournit la meilleure isolation. Toutes les transactions sont restaurées à l’aide de points d’enregistrement SQL et toutes les instructions de la base de données sont acheminées vers la connexion principale, y compris les connexions utilisateur. Aucune donnée n’est conservée. |
LegacyRollback | Toutes les instructions d’insertion sont suivies et supprimées pendant le nettoyage. Toutes les instructions d’insertion sont rétrogradées ligne par ligne. Un cas d’utilisation typique est lorsque vous testez des connexions utilisateur ou des scénarios de simultanéité. Ce niveau d’isolation nettoie les données de configuration et la recommandation est d’encapsuler chaque méthode de test dans ttsBegin et ttsAbort. |
LegacyRollbackWithUpdateTracking | Toutes les instructions de mise à jour, de suppression et d’insertion sont suivies et rétablies pendant le nettoyage. Toutes les instructions d’insertion, de mise à jour et de suppression sont suivies et rétrogradées ligne par ligne. Ce mode est le niveau d’isolation le plus lent. |
None | N’utilisez ce mode que pour le débogage. Ne fournit aucune isolation. Ce paramètre peut être utile pour déboguer temporairement un test, car il vous permet d’utiliser l’interface utilisateur normale pour parcourir les données créées par le test. |
Exemple :
[SysTestTransaction(TestTransactionMode::LegacyRollback)]
class MyTestSample extends SysTestCase
Création d’un module de test pour gérer le code de test et les FormAdaptors
La création d’un module spécifique au test aide à maintenir le code de test uni et gérable.
Ouvrez Visual Studio et accédez à Dynamics 365>Gestion des modèles>Créer un modèle.
Saisissez le nom du modèle, sélectionnez la couche, puis saisissez d’autres détails. Il est recommandé d’inclure le mot Test dans le nom du module de test. La définition de build par défaut est configurée pour découvrir tous les modules de test contenant le mot Test.
Étant donné que ce modèle contient des formulaires d’Application Platform/Foundation, ajoutez des références aux modèles sélectionnés (cochés) dans la figure suivante.