Mehrere Datenquellen
Mehrere DataSources sind nützlich, wenn Sie nach einer kombinationsbasierten Erweiterung einer oder mehrerer DataSources suchen (Tabellenbasierte Datenquelle, PICT-basierte DataSource oder WMI-basierte Datenquelle).
Das Erstellen Ihres Testdesigns, um diese Funktion effizient zu nutzen, ist von größter Bedeutung. Sehen wir uns mit Hilfe eines Beispiels an, warum dies der Fall ist. Angenommen, Sie möchten als Teil mehrerer DataSource zwei tabellenbasierte DataSources, eine WMI-basierte Datenquelle und eine PICT-basierte Datenquelle angeben. Aus Gründen des Arguments sagen wir, dass die erste Tabelle 4 Zeilen hat, die zweite über 5 Zeilen verfügt, die WMI-Abfrage gibt 2 Ergebnisse zurück und die PICT DataSource generierte 6 paarweise Kombinationen. TAEF wird eine kombinierte Erweiterung dieser Parametersätze erhalten. Das bedeutet, dass die fragliche Testmethode aufgerufen wird (4 X 5 X 2 X 6 =) 240 Mal! Eine Erhöhung der Anzahl der Aufrufe der Testmethode mit unterschiedlichen Kombinationen von Parametern kann zu abnehmenden Ergebnissen führen, soweit die Testabdeckung geht. Dies macht es wichtig, den Test mit mehreren DataSources mit Sorgfalt zu entwerfen und andere Alternativen abzuwägen. Im Folgenden sind einige Punkte aufgeführt, die Sie möglicherweise berücksichtigen möchten:
- Stellen Sie sicher, dass es mehrwertige Tabellen enthält. Wenn Sie sie nicht trennen müssen, könnten Sie eine effiziente Kombination von Parametern selbst erstellen.
- Überprüfen Sie, ob Sie eine PICT-Modelldatei mit Einschränkungen anstelle mehrerer Tabellen verwenden können.
- Überprüfen Sie, ob der Testfall einen Wert in mehrere Tests umgestaltet und Teilmengen aus den mehreren DataSources jedem neu erstellten Untertest zugeordnet werden.
Angeben mehrerer Datenquellen
Der wichtigste Aspekt hier ist das Angeben der Datenquelle. Sehen wir uns den Codeausschnitt aus unseren nativen und verwalteten Beispielen an.
Ursprünglich
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 */
Siehe die Zeilen 11, 15 und 16 im obigen Beispiel. Im Allgemeinen ist das zu befolgende Muster, um die Datenquelle anzugeben, eine durch Semikolons getrennte Liste jeder DataSource-Spezifikation. Die Spezifikation würde auch in verwaltetem Code sehr ähnlich aussehen.
Verwalteten
[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);
}
In den Beispielen werden auch die Methoden zum Angeben mehrerer Datenquellen in mehreren Zeilen veranschaulicht. Natürlich könnten Sie die DataSource in einer einzelnen Zeile (wie unten dargestellt) angegeben haben, aber Sie könnten die Lesbarkeit erheblich verbessern, indem Sie die oben gezeigten Konstrukte verwenden.
Angeben von DataSource in einer einzelnen Zeile
[DataSource("Table:CSharpAdvancedDataDrivenTests.xml#FirstTable;WMI:SELECT ProcessId FROM Win32_Service WHERE Name='Themes'")]
Nur um erneut zu durchlaufen: Die Testmethode wird einmal für jede n-wege-kombinatorische Erweiterung von Datensätzen ausgeführt, die von jeder einzelnen Datenquelle generiert werden. For example, for the above managed example, safely assuming that there is only one Themes service running, and knowing that there are 3 Rows in the table data source provided, the test method will be invoked 3 times (1 X 3). Im systemeigenen Beispielfall sind in der SecondTable-Testmethode zwei Tabellendatenquellen angegeben. Die erste Tabelle enthält 3 Zeilen, und die zweite Tabelle enthält vier Zeilen. Daher wird die Testmethode 12 Mal aufgerufen (3 X 4).
Einschränkungen, die beim Angeben mehrerer Datenquellen gelten
Die Einschränkungen gelten nur, wenn Sie eine tabellenbasierte Datenquelle in den spezifikationen für DataSource angeben möchten. "Table DataSource " muss als "Table:<relative path to XML file>#<TableId>" angegeben werden. Wenn TAEF feststellt, dass "TableId" als separate Metadaten bereitgestellt wird, wird davon ausgegangen, dass es sich bei der Datenquelle um eine einzelne tabellenbasierte Datenquelle handelt und fortfahren.