Partager via


Test piloté par les données léger

Il existe probablement des scénarios dans lesquels un test de source de données XML et de table complet basé sur des données peut être trop lourd pour vos besoins de scénario de test. Les tests pilotés par les données légers permettent d’obtenir rapidement et facilement une prise en charge des tests pilotés par les données lorsque les données de votre test sont simples et peuvent facilement être exprimées sous forme de métadonnées. Utilisons un exemple et voyons comment procéder.

Les données du test piloté par les données légères sont exprimées sous la forme d’un ensemble de métadonnées (au niveau du test, de la classe ou du module). Pour chacune des valeurs de cet ensemble, les méthodes de test en question, ainsi que les méthodes d’installation et de déchirure associées seront exécutées pour chaque valeur de l’ensemble. Examinons comment créer ce code en code natif :

1  #include "WexString.h"
2  #include "WexTestClass.h"
3
4  using namespace WEX::Common;
5  using namespace WEX::TestExecution;
6  using namespace WEX::Logging;

7  namespace WEX { namespace TestExecution { namespace Examples
8  {
9      class SimpleDataDrivenExample
10     {
11         TEST_CLASS(SimpleDataDrivenExample);
12         ...
13         BEGIN_TEST_METHOD(SetsOfDataTest)
14             TEST_METHOD_PROPERTY(L"Data:Color", L"{Purple, Maroon, Brown}")
15         END_TEST_METHOD()
16     };

Notez les valeurs des paramètres pour TEST_METHOD_PROPERTY à la ligne 14. La valeur des métadonnées de test commence par un « { » et se termine par un « } » indiquant qu’une liste de valeurs séparées par des virgules ou des points-virgules a été spécifiée. TAEF réexécutera la méthode de test en question, SetsOfDataTest() une fois pour chaque valeur de cet ensemble.

Notez également que le nom des métadonnées commence par un « Data : ». Cela implique que le jeu de métadonnées spécifie vraiment des variantes pour les paramètres de test pilotés par les données et serait disponible pour la méthode de test réelle, comme les paramètres de données d’un test basé sur des données table comme suit :

11     ...
12
13     void SimpleDataDrivenExample::SetsOfDataTest()
14     {
15         String color;
16         if (SUCCEEDED(TestData::TryGetValue(L"color", color)))
17         {
18             Log::Comment(L"Color retrieved was " + color);
19         }
20     }
21 } /* namespace Examples */ } /* namespace TestExecution */ } /* namespace WEX */

Lors de l’utilisation du code managé, la spécification et la récupération du jeu de données ressemblent beaucoup à l’exemple natif. Voyons voir :

1  namespace WEX.Examples
2  {
3      using Microsoft.VisualStudio.TestTools.UnitTesting;
4      using System;
5      using System.Collections;
6      using System.Data;
7      using WEX.Logging.Interop;
8      using WEX.TestExecution;
9
10     [TestClass]
11     public class CSharpDataDrivenSimpleExample
12     {
13         ...
14         [TestMethod]
15         [TestProperty("Data:Color", "{Red, Green, Blue}")]
16         public void SetsOfMetadataTest()
17         {
18             Log.Comment("Color is " + m_testContext.DataRow["Color"]);
19         }
20
21         public TestContext TestContext
22         {
23             get { return m_testContext; }
24             set { m_testContext = value; }
25         }
26
27         private TestContext m_testContext;
28     }
29 }

Comme dans le cas de tests basés sur des données basées sur des tables, les jeux de données spécifiés en tant que métadonnées permettent la récupération via TestContext.DataRow.Notez que pour conserver le poids léger des tests pilotés par les données, le type de paramètre sera toujours WEX ::Common ::String (en code natif) et String(dans le code managé)

Si plusieurs valeurs de données sont spécifiées, un produit cartésien de toutes les valeurs possibles est obtenu et la méthode de test est appelée pour chaque combinaison.

Il est également possible d’avoir des jeux de métadonnées (tels que des jeux de métadonnées ThreadingModel) ainsi que des jeux de données spécifiés pour la même méthode de test. Dans ce cas, une expansion combinatoire de tous les jeux de métadonnées et des jeux de données sera produite par TAEF et les méthodes de test en question seront appelées avec chaque combinaison.

Cas spéciaux : test piloté par les données avec un ensemble de métadonnées ou de données

Vous pouvez avoir une méthode de test dépendante du test basé sur des données basée sur table, ainsi que spécifier un ensemble de données ou de métadonnées pour celui-ci. Par exemple, une méthode de test peut avoir des paramètres « size » et « color » spécifiés dans le test basé sur les données de table et souhaiter que toutes les lignes soient exécutées une fois avec le paramètre « transparence » défini sur true, puis défini sur false. Dans ce cas, la « transparence » peut être spécifiée en tant que jeu « {true, false} » pour le test piloté par les données. Il est important de noter que, en cas de conflits de paramètres dans un jeu de métadonnées, la valeur et le type de paramètre au niveau de la ligne remplacent la valeur du jeu de métadonnées.

Exécution de tests avec des jeux de données/métadonnées

L’exécution de tests contenant des jeux de données est tout à fait intuitive. Examinons la sortie /listproperties pour nos exemples de tests :

1   te Examples\CPP.DataDriven.Example.dll /name:*SetsOfDataTest* /listproperties
2
3   Test Authoring and Execution Framework v2.9.3k for x64
4
5           f:\ Examples\CPP.SimpleDataDriven.Example.dll
6               WEX::TestExecution::Examples::SimpleDataDrivenExample<
7                   WEX::TestExecution::Examples::SimpleDataDrivenExample::SetsOfDataTest#metadataSet0
8                           Property[Data:Color] = {Purple, Maroon, Brown}
9
10                          Data[Color] = Purple
11
12                  WEX::TestExecution::Examples::SimpleDataDrivenExample::SetsOfDataTest#metadataSet1
13                          Property[Data:Color] = {Purple, Maroon, Brown}
14
15                          Data[Color] = Maroon
16
17                  WEX::TestExecution::Examples::SimpleDataDrivenExample::SetsOfDataTest#metadataSet2
18                          Property[Data:Color] = {Purple, Maroon, Brown}
19
20                          Data[Color] = Brown

Notez les lignes 7, 12 et 17 dans l’exemple ci-dessus. Un index de jeu de métadonnées est ajouté à chaque appel de la méthode de test avec la valeur dans le jeu de données. Cet index est de la forme suivante :

<namespace qualified test method name>#metadataSet<metadataIndex>

Les lignes 8, 13 et 18 indiquent le jeu de métadonnées spécifié pour cette prise en charge des tests pilotés par les données légères. Dans ce cas, l’ensemble se compose de couleurs violettes, marron et brun. Les lignes 10, 15 et 20 indiquent la valeur réelle de cet ensemble qui est active pour l’appel actuel du test. Dans le cas de SetsOfMetadataTest#metadataSet1, la deuxième invocation de cette méthode, la valeur de paramètre active de l’ensemble est « Maroon »

Vous pouvez sélectionner la valeur ou le nom des données comme dans les tests basés sur des données basées sur table. Par exemple, vous pouvez sélectionner SetsOfDataTest#metadataSet1 par une requête de sélection telle que /select :@Data:Color='Maroon' ou /name :*#metadataSet1

Pour obtenir une référence rapide, la sortie /listproperties de l’exemple de test géré est illustrée ci-dessous :

te Examples\CSharp.DataDriven.Example.dll /name:*SetsOfMetadataTest* /listproperties

Test Authoring and Execution Framework v2.9.3k for x64

        f:\ Examples\CSharp.DataDrivenSimple.Example.dll
            WEX.Examples.CSharpDataDrivenSimpleExample
                WEX.Examples.CSharpDataDrivenSimpleExample.NonDataDrivenTest
                WEX.Examples.CSharpDataDrivenSimpleExample.SetsOfMetadataTest#metadataSet0
                        Property[Data:Color] = {Red, Green, Blue}

                        Data[Color] = Red

                WEX.Examples.CSharpDataDrivenSimpleExample.SetsOfMetadataTest#metadataSet1
                        Property[Data:Color] = {Red, Green, Blue}

                        Data[Color] = Green

                WEX.Examples.CSharpDataDrivenSimpleExample.SetsOfMetadataTest#metadataSet2
                        Property[Data:Color] = {Red, Green, Blue}

                        Data[Color] = Blue