Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Azra [Florent Santin]

.Net, X'Net, aucun lien de parenté V2.0

Actualités

  • MSN Alerts
    View Florent Santin's profile on LinkedIn
     Cet été j’en ai rien à coder : le retour
|VS 2008] Jeux de données XML et CSV pour tests unitaires

Dans Visual Studio Team Test, il est possible de générer des jeux de données pour un test. Les "Data-driven Tests" permettent de rendre dynamique les paramètres d'entrée et de validation d'une méthode de test.

Exemple, si je veux tester une méthode qui fait de l'addition avec plusieurs cas valides, au lieu d'écrire un test unitaire pour chaque paire de valeurs, je vais parametrer mon test pour aller chercher ses valeurs dans une source de données externes.

Pour tester le code suivant:

public class Calcul { public int addition(int a, int b) { return a + b; } }

Le générateur de code de test de Visual Studio propose le test unitaire ci-dessous:

/// <summary> ///A test for addition ///</summary> [TestMethod()] public void additionTest() { Calcul target = new Calcul(); // TODO: Initialize to an appropriate value int a = 0; // TODO: Initialize to an appropriate value int b = 0; // TODO: Initialize to an appropriate value int expected = 0; // TODO: Initialize to an appropriate value int actual; actual = target.addition(a, b); Assert.AreEqual(expected, actual); Assert.Inconclusive("Verify the correctness of this test method."); }

On remarque ici qu'il est nécessaire d'entrer en dur les paramètres "a", "b" et le résultat attendu "expected".

Pour que ce test soit joué pour un ensemble de valeurs il est possible d'ajouter une source de données, pour ceci, il suffit d'aller dans les propriétées du test unitaire généré, accessible via la fenêtre "Test View", et de parametrer la propriétée "Data Connection String":

Un assistant apparait, permettant de selectionner la source de données souhaitée, et c'est la que Visual Studio 2008 apporte des nouveautés en proposant, en plus de la source de données SQL Server, des sources CSV et XML: beaucoup plus pratique à deployer, mettre à jour et beaucoup moins contraignant.

Prenons XML, et selectionnons un fichier créé précedemment:

<values> <value> <a>10</a> <b>4</b> <resultat>14</resultat> </value> <value> <a>6</a> <b>2</b> <resultat>8</resultat> </value> <value> <a>2</a> <b>3</b> <resultat>3</resultat> </value> </values>
 
(une erreur est volontairement présente dans ces jeux de données)

Ce qui donne au niveau de l'assistant:

Une fois cet assistant terminé, l'attribut [DataSource] suivant va être ajouté à la méthode de test unitaire (on peut donc bien entendu se passer de l'assistant pour reproduire la même opération):

[DataSource("Microsoft.VisualStudio.TestTools.DataSource.XML", "|DataDirectory|\\datas.xml", "value", DataAccessMethod.Sequential), DeploymentItem("TestProject1\\datas.xml"), TestMethod()]

Cet attribut indique que le test va utiliser une source de données XML, au travers du fichier datas.xml, dans l'ensemble de données "value", que les lignes de la source de données vont être exécutée les unes a la suite des autres de manières séquentielle (possibilité de mettre "random" ici), et que le fichier datas.xml sera déployé avec le test unitaire.

Il ne reste plus qu'a compléter le code du test pour aller piocher les valeurs "a", "b" et "expected" dans le fichier XML en utilisant l'object "TestContext" permettant d'obtenir les propriétées de la ligne active utilisée dans la source de données:

/// <summary> ///A test for addition ///</summary> [DataSource("Microsoft.VisualStudio.TestTools.DataSource.XML", "|DataDirectory|\\datas.xml", "value", DataAccessMethod.Sequential), DeploymentItem("TestProject1\\datas.xml"), TestMethod()] public void additionTest() { Calcul target = new Calcul(); int a = Convert.ToInt32(TestContext.DataRow["a"]); int b = Convert.ToInt32(TestContext.DataRow["b"]); int expected = Convert.ToInt32(TestContext.DataRow["resultat"]); int actual; actual = target.addition(a, b); Assert.AreEqual(expected, actual); }

Une fois le test exécuté, on remarque que celui ci est joué non pas une seule fois, mais autant de fois qu'il y'a de lignes dans la source de données (3 ici). Le test échoue dans notre cas au niveau du troisième jeu de valeurs (2 + 3 ne donnent effectivement pas 3).

 

Voila, bon tests!

Posted: dimanche 14 octobre 2007 14:21 par azra
Classé sous :
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :

Commentaires

pc152 a dit :

C'est vraiement formidable ces petites astuces, jsute faire adérer les développeurs ;)

# novembre 6, 2007 14:32
Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Avoir une propri&#233;t&#233; sur l'object context qui renvoit les sous-entit&#233;s v2 par Matthieu MEZIL le il y a 5 heures et 23 minutes

- WPF : la gestion des dates (Label, TextBlock) par Pierrick's Blog le il y a 11 heures et 5 minutes

- [ASP.NET] - ASP.NET Generated Image par Aurelien's Blog - When ClientSide meets .Net le il y a 12 heures et 32 minutes

- Utiliser le SDK Open XML pour manipuler vos documents Office Open XML par Julien Chable le il y a 13 heures et 46 minutes

- [Silverlight] - Créer un contrôle réutilisable et des propriétés personnalisées. par Danuz le il y a 17 heures et 3 minutes

- Photosynth : Composez et partagez vos scènes ! par Blog technique de Nicolas Boonaert le il y a 17 heures et 7 minutes

- Comment d&#233;bugger un programme de g&#233;n&#233;ration de code utilis&#233; dans VS ? par Matthieu MEZIL le il y a 17 heures et 7 minutes

- Avoir une propriété sur l'object context qui renvoit les sous-entités par Matthieu MEZIL le il y a 17 heures et 19 minutes

- Sortie du SDK 1.1 de Visual Studio 2008 par Michel Perfetti [Miiitch] le il y a 19 heures et 54 minutes

- Skyfire, Silverlight sur votre mobile ! par alex# le il y a 20 heures et 10 minutes