Delen via


Meerdere gegevensbronnen

Meerdere datasources zijn handig wanneer u op zoek bent naar een combinatieuitbreiding van een of meer DataSources (gegevensbron op basis van tabel, PICT of op WMI gebaseerde gegevensbron).

Het maken van uw testontwerp om efficiënt gebruik te maken van deze functie is van cruciaal belang. Laten we eens kijken waarom dit zo is. Stel dat u als onderdeel van meerdere DataSources twee gegevensbronnen op basis van tabellen, één op WMI gebaseerde gegevensbron en één op PICT gebaseerde gegevensbron wilt opgeven. Stel dat de eerste tabel vier rijen heeft, de tweede heeft vijf rijen, de WMI-query retourneert 2 resultaten en de PICT-gegevensbron heeft zes combinaties met paargewijze combinaties. TAEF komt met een combinatoriële uitbreiding van deze sets parameters. Dit betekent dat de betreffende testmethode 240 keer wordt aangeroepen (4 X 5 X 2 X 6 =) Het verhogen van het aantal aanroepen van de testmethode met verschillende combinaties van parameters kan leiden tot afnemend rendement wat betreft de testdekking. Dit maakt het belangrijk om de test met behulp van meerdere DataSources zorgvuldig te ontwerpen en door andere alternatieven af te wegen. Hier volgen enkele punten die u kunt overwegen:

  • Zorg ervoor dat het hebben van meerdere tabellen waarde toevoegt. Als u ze niet afzonderlijk nodig hebt, kunt u zelf een efficiënte combinatie van parameters bedenken.
  • Controleer of u een PICT-modelbestand met beperkingen kunt gebruiken in plaats van meerdere tabellen.
  • Controleer of er waarde is voor het herstructureren van uw testcase in meerdere tests en het koppelen van subsets uit de meerdere DataSources aan elke zojuist gemaakte subtest.

Meerdere gegevensbronnen opgeven

Het belangrijkste aspect hier is het opgeven van de DataSource. Laten we eens kijken naar het codefragment uit onze systeemeigen en beheerde voorbeelden.

Native

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

Zie regel 11, 15 en 16 in het bovenstaande voorbeeld. Over het algemeen is het patroon dat moet worden gevolgd om de DataSource op te geven een door puntkomma's gescheiden lijst van elke DataSource-specificatie. De specificatie zou er ook vergelijkbaar uitzien in beheerde code.

Beheerd

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

De voorbeelden laten ook zien hoe u meerdere DataSources op meerdere regels kunt opgeven. Natuurlijk kunt u de DataSource op één regel opgeven (zoals hieronder wordt weergegeven), maar u kunt de leesbaarheid aanzienlijk verbeteren met behulp van de bovenstaande weergegeven constructies.

DataSource opgeven op één regel

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

Herhaal: de testmethode zal eenmaal worden uitgevoerd voor elke combinatorische uitbreiding van gegevenssets die door elke afzonderlijke DataSource worden gegenereerd. Voor het bovenstaande beheerde voorbeeld kunnen we er veilig vanuit gaan dat er slechts één thema-service wordt uitgevoerd en wetende dat er drie rijen in de gegevensbron van de tabel zijn opgegeven, wordt de testmethode 3 keer aangeroepen (1 X 3). In het systeemeigen voorbeeldscenario, in de testmethode SecondTable, zijn er twee tabelgegevensbronnen opgegeven. De eerste tabel bevat 3 rijen en de tweede tabel bevat 4 rijen. Daarom wordt de testmethode 12 keer aangeroepen (3 X 4).

Beperkingen die van toepassing zijn tijdens het opgeven van meerdere gegevensbronnen

De beperkingen zijn alleen van toepassing wanneer u een gegevensbron op basis van tabellen wilt opgeven in de specificaties van meerdere datasources. Tabelgegevensbron moet worden opgegeven als Tabel:<relatief pad naar XML-bestand>#<TableId>. Als TAEF detecteert dat TableId is opgegeven als afzonderlijke metagegevens, wordt ervan uitgegaan dat de DataSource één gegevensbron op basis van een tabel is en doorgaat.