Sources de données multiples
Plusieurs Sources de données sont utiles lorsque vous recherchez une extension combinatoire d’une ou plusieurs Sources de données (Source de données basée sur table, Source de données PICT ou DataSource basée sur WMI).
L’élaboration de votre conception de test pour utiliser efficacement cette fonctionnalité est primordiale. Voyons avec l’aide d’un exemple pourquoi c’est le cas. Supposons que dans le cadre de plusieurs Sources de données, vous souhaitez spécifier deux Sources de données basées sur table, une source de données WMI et une source de données PICT. Pour l’argument, supposons que la première table comporte 4 lignes, la deuxième comporte 5 lignes, la requête WMI retourne 2 résultats et les combinaisons picT DataSource générées 6 paires. TAEF présentera une extension combinatoire de ces ensembles de paramètres. Cela signifie que la méthode de test en question sera appelée (4 X 5 X 2 X 6 =) 240 fois ! L’augmentation du nombre d’appels de la méthode de test avec différentes combinaisons de paramètres peut entraîner une diminution des résultats dans la mesure où la couverture des tests va. Cela rend important de concevoir le test à l’aide de plusieurs Sources de données avec soin et en pesant d’autres alternatives. Voici quelques points à prendre en compte :
- Assurez-vous qu’elle ajoute de la valeur pour avoir plusieurs tables. Si vous n’avez pas besoin d’être séparés, vous pouvez créer une combinaison efficace de paramètres vous-même.
- Vérifiez si vous pouvez utiliser un fichier de modèle PICT avec des contraintes, au lieu de plusieurs tables.
- Vérifiez s’il existe une valeur dans la refactorisation de votre cas de test en plusieurs tests et l’association de sous-ensembles à partir de plusieurs DataSources avec chaque sous-test nouvellement créé.
Spécifier plusieurs sources de données
L’aspect clé ici est la façon de spécifier la source de données. Examinons l’extrait de code de nos exemples natifs et managés.
Natif
1 namespace WEX { namespace TestExecution { namespace Examples
2 {
3 class AdvancedDataDrivenTests
4 {
5 TEST_METHOD_SETUP(DataDrivenSetup);
6 TEST_METHOD_CLEANUP(DataDrivenCleanup);
7
8 TEST_CLASS(AdvancedDataDrivenTests)
9
10 BEGIN_TEST_METHOD(SecondTable)
11 TEST_METHOD_PROPERTY(L"DataSource", L"Table:AdvancedDataDrivenTests.xml#Table2;Table:CppTestLevelDataSource.xml#NestedTable")
12 END_TEST_METHOD()
13
14 BEGIN_TEST_METHOD(FirstTable)
15 TEST_METHOD_PROPERTY(L"DataSource", L"Table:AdvancedDataDrivenTests.xml#Table1;"
16 L"PICT:PictDataSource.txt;" L"WMI:SELECT Location FROM Win32_StartupCommand")
17 END_TEST_METHOD()
18 };
19 } /* namespace Examples */ } /* namespace TestExecution */ } /* namespace WEX */
Consultez les lignes 11, 15 et 16 dans l’exemple ci-dessus. En général, le modèle à suivre pour spécifier la Source de données est une liste séparée par des points-virgules de chaque spécification DataSource. La spécification ressemblerait également au code managé.
Géré
[TestMethod]
[DataSource(@"Table:CSharpAdvancedDataDrivenTests.xml#FirstTable;
WMI:SELECT ProcessId FROM Win32_Service WHERE Name='Themes'")]
public void First()
{
Log.Comment("In CSharpAdvancedDataDrivenTests.First");
String[] shapes = m_testContext.DataRow["Shape"] as String[];
foreach (String shape in shapes)
{
Console.WriteLine("The shape is " + shape);
}
Int32[] lengths = m_testContext.DataRow["Length"] as Int32[];
foreach (int length in lengths)
{
Console.WriteLine("The length is " + length.ToString());
}
String description = (String)m_testContext.DataRow["Description"];
Boolean desktopInteract = (Boolean)m_testContext.DataRow["DesktopInteract"];
UInt32 processId = (UInt32)m_testContext.DataRow["ProcessId"];
Log.Comment("Themes service is running on process " + processId.ToString());
Log.Comment("Themes service description: " + description);
}
Les exemples illustrent également les façons de spécifier plusieurs Sources de données dans plusieurs lignes. Bien sûr, vous pourriez avoir spécifié la Source de données sur une seule ligne (comme indiqué ci-dessous), mais vous pouvez améliorer considérablement la lisibilité à l’aide des constructions ci-dessus indiquées.
Spécification de DataSource sur une seule ligne
[DataSource("Table:CSharpAdvancedDataDrivenTests.xml#FirstTable;WMI:SELECT ProcessId FROM Win32_Service WHERE Name='Themes'")]
Pour re-itérer : la méthode de test est exécutée une seule fois pour chaque extension combinatoire multidirectionnelle des jeux de données générés par chaque Source de données individuelle. Par exemple, pour l’exemple managé ci-dessus, en supposant en toute sécurité qu’il n’y a qu’un seul service Thèmes en cours d’exécution et qu’il existe 3 lignes dans la source de données de table fournie, la méthode de test est appelée 3 fois (1 X 3). Dans l’exemple natif, dans la méthode de test SecondTable, il existe deux sources de données de table spécifiées. La première table contient 3 lignes et la deuxième table contient 4 lignes. Par conséquent, la méthode de test est appelée 12 fois (3 X 4).
Contraintes qui s’appliquent lors de la spécification de plusieurs sources de données
Les contraintes s’appliquent uniquement lorsque vous souhaitez spécifier une source de données basée sur une table dans les plusieurs spécifications DataSource. Table DataSource doit être spécifiée en tant que chemin Table :<relative au fichier> XML#<TableId>. Si TAEF découvre que « TableId » est fourni en tant que métadonnées distinctes, il part du principe que la Source de données est une source de données basée sur une table unique et continue.