Více zdrojů dat

Více zdrojů dat je užitečné, když hledáte kombinační rozšíření jednoho nebo více zdrojů dat (Zdroj dat založený na tabulkách, zdroj dat založený na PICT nebo zdroj dat založený na rozhraní WMI).

Vytvoření testovacího návrhu, aby se tato funkce efektivně využívala, je velmi důležitá. Pojďme se podívat s pomocí příkladu, proč je to tak. Pokud jako součást více datových zdrojů chcete zadat dva datové zdroje založené na tabulce, jeden datový zdroj založený na WMI a jeden datový zdroj založený na PICT. Pro účely argumentu řekněme, že první tabulka má 4 řádky, druhý má 5 řádků, dotaz WMI vrátí 2 výsledky a PICT DataSource vygeneroval 6 párových kombinací. TaEF vytvoří kombinatorické rozšíření těchto sad parametrů. To znamená, že se vyvolá otazní metoda (4 X 5 X 2 X 6 =) 240krát ! Zvýšení počtu vyvolání testovací metody s různými kombinacemi parametrů může přinést snížení výsledků, pokud jde o pokrytí testu. Díky tomu je důležité navrhnout test pomocí více zdrojů dat s opatrností a zvážit další alternativy. Tady je několik bodů, které byste měli zvážit:

  • Ujistěte se, že mít více tabulek přináší hodnotu. Pokud je nepotřebujete oddělit, můžete sami vytvořit efektivní kombinaci parametrů.
  • Zkontrolujte, jestli můžete místo více tabulek použít soubor modelu PICT s omezeními.
  • Zkontrolujte, jestli existuje hodnota refaktoringu testovacího případu do více testů a přidružování podmnožina z více zdrojů dat k jednotlivým nově vytvořeným dílčím testům.

Zadání více zdrojů dat

Klíčovým aspektem tohoto postupu je určení zdroje dat. Pojďme se podívat na fragment kódu z našich nativních a spravovaných příkladů.

Nativní

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 */

Viz řádky 11, 15 a 16 v příkladu výše. Obecně platí, že vzor, který se má použít k určení zdroje dat, je seznam oddělený středníkem pro každou specifikaci Zdroje dat. Specifikace by vypadala velmi podobně i ve spravovaném kódu.

Řízen

[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);
}

Příklady také ukazují způsoby, jak zadat více zdrojů dat v několika řádcích. Samozřejmě jste mohli zdroj dat zadat na jednom řádku (jak je znázorněno níže), ale mohli byste výrazně zlepšit čitelnost pomocí výše uvedených konstruktorů.

Zadání zdroje dat na jednom řádku

[DataSource("Table:CSharpAdvancedDataDrivenTests.xml#FirstTable;WMI:SELECT ProcessId FROM Win32_Service WHERE Name='Themes'")]

Jen pro opakování iterace: Testovací metoda se spustí jednou pro každé n-way combinatorické rozšíření datových sad vygenerovaných jednotlivými zdroji dat. Například u výše uvedeného spravovaného příkladu, za bezpečného předpokladu, že je spuštěna pouze jedna služba motivů a že existují 3 řádky ve zdroji dat tabulky, bude testovací metoda vyvolána 3krát (1 X 3). V nativním příkladu v metodě SecondTable test jsou zadány dvě tabulky DataSources. První tabulka obsahuje 3 řádky a druhá tabulka obsahuje 4 řádky. Proto se testovací metoda vyvolá 12krát (3 X 4).

Omezení, která platí při zadávání více zdrojů dat

Omezení platí pouze v případě, že chcete zadat Zdroj dat založený na tabulce ve specifikacích více zdrojů dat. Zdroj dat tabulky musí být zadán jako Tabulka:<relativní cesta k souboru> XML#<TableId>. Pokud taEF zjistí, že je "TableId" k dispozici jako samostatná metadata, předpokládá se, že Zdroj dat je jeden zdroj dat založený na tabulce a pokračuje.