Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Abschnitt werden mehrere Beispiele für datengesteuerte Tests beschrieben und spezifische Features in den einzelnen Beispielen behandelt.
Im ersten Beispiel handelt es sich um einen einfachen datengesteuerten Test namens SimpleDataDrivenExample.
Im verwalteten Beispiel finden Sie eine XML-Datei, die wie folgt aussieht:
1 <?xml version="1.0"?>
2 <Data>
3 <Table Id="Table1">
4 <ParameterTypes>
5 <ParameterType Name="Size">Int32</ParameterType>
6 <ParameterType Name="Color">String</ParameterType>
7 </ParameterTypes>
8 <Row>
9 <Parameter Name="Size">4</Parameter>
10 <Parameter Name="Color">White</Parameter>
11 </Row>
12 <Row>
13 <Parameter Name="Size">10</Parameter>
14 <Parameter Name="Color">Black</Parameter>
15 </Row>
16 <Row>
17 <Parameter Name="Size">9</Parameter>
18 <Parameter Name="Color">Orange</Parameter>
19 </Row>
20 <Row>
21 <Parameter Name="Size">9</Parameter>
22 <Parameter Name="Color">Blue</Parameter>
23 </Row>
24 </Table>
25 </Data>
Diese XML-Datei definiert die Datenparameter für den zu verwendenden datengesteuerten Test. Der oberste XML-Knoten ist das <Data-Tag> , das mindestens ein <darin definiertes Table-Tags> enthalten kann. Jede Tabelle muss einem eindeutigen Attribut "ID" zugeordnet werden. Die Testfunktionen verwenden den Tabellen-ID-Wert, um die bestimmte Tabelle zu identifizieren, die sie in der XML-Datei verwenden.
Innerhalb des <Table-Tag> verfügen Sie über einen optionalen <ParameterTypes>-Abschnitt. Hier können Sie den Datentyp für einen bestimmten Parameter explizit mithilfe von <ParameterTypes-Tags> angeben. Im obigen Beispiel geben Sie explizit an, dass der Parameter "Size" vom Typ "Int32" und "Parameter "Color" eine Zeichenfolge ist. Zusammenfassung: Der ParameterTypes-Abschnitt ist optional. Wenn keine Parametertypinformationen angegeben werden, werden sie standardmäßig als Zeichenfolge gespeichert.
Wenn Sie die Beispiele "Managed" und "Native" vergleichen, werden Sie feststellen, dass der einzige Unterschied zwischen den beiden Beispielen im <ParameterTypes-Block> liegt. Die native XML-Datei gibt die Größe als nativen ganzzahligen Typ "int" an und verwendet den Standardtyp WEX::Common::String für die Farbe, indem der Typ nicht explizit angegeben wird. Aus Gründen der Einfachheit zeigt das folgende Beispiel die XML-Datei aus dem systemeigenen Beispiel.
1 <?xml version="1.0"?>
2 <Data>
3 <Table Id="SimpleTable">
4 <ParameterTypes>
5 <ParameterType Name="Size">int</ParameterType>
6 </ParameterTypes>
7 <Row>
8 <Parameter Name="Size">4</Parameter>
9 <Parameter Name="Color">White</Parameter>
10 </Row>
11 <Row>
12 <Parameter Name="Size">10</Parameter>
13 <Parameter Name="Color">Black</Parameter>
14 </Row>
15 <Row>
16 <Parameter Name="Size">9</Parameter>
17 <Parameter Name="Color">Orange</Parameter>
18 </Row>
19 <Row>
20 <Parameter Name="Size">9</Parameter>
21 <Parameter Name="Color">Blue</Parameter>
22 </Row>
23 </Table>
24 </Data>
Die parametertypen, die in nativem und verwaltetem Code unterstützt werden, werden in Parametertypen in Tabellendatenquellen aufgeführt.
Wenn ein anderer Datentyp angegeben ist, löst der Test eine Warnung aus und berücksichtigt, dass er eine Zeichenfolge ist.
Wenn Sie mit den XML-Dateien fortfahren, verfügen Sie nach dem <ParameterTypes-Block> in beiden XML-Dateien über identische Zeilensätze<>, die jeweils einer Gruppe von Daten in unseren verwalteten und nativen Beispielen entsprechen. In diesem speziellen Fall verfügen Sie über 4 Datensätze, die mithilfe von vier <Zeilenblöcken> definiert werden, wobei jeweils die Werte der Parameter mithilfe <der Parametertags> angegeben werden.
Dies deckt die wesentlichen Grundlagen der verschiedenen Teile der Datenquellendatei ab. Sehen wir uns nun an, wie Sie die Werte abrufen können, die Sie in der obigen XML-Datei angegeben haben.
Einrichtung des Tests als datengesteuerter Test
Nachdem die Daten spezifiziert sind, benötigen Sie eine Möglichkeit, den Code oder die Testmethode, die die Daten verwenden wird, mit diesen in der XML-Datei zu verknüpfen. Dazu geben Sie in den verwalteten und nativen Beispielen die Metadaten "DataSource" an. Die DataSource-Metadaten enthalten drei Teile:
- 'Table:' – Dies identifiziert die Datenquelle als XML-Tabelle.
- 'DataDrivenTests.xml' – dies ist die Datei, die die XML-Tabelle enthält.
- '#Table2' – Nach dem Delimeter '#' identifiziert der Wert 'Table2' die bestimmte Tabelle im zu verwendenden XML-Dokument. Eine einzelne XML-Tabellendatenquelle kann mehrere Tabellen enthalten. TAEF durchsieht die XML-Datei für ein Table-Element mit einem Attribut "ID", das dem angegebenen Wert entspricht.
Sehen Sie sich den Code, der die oben genannten Aspekte abdeckt, noch einmal kurz an.
Nativer Code
1 class SimpleDataDrivenExample
2 {
3 BEGIN_TEST_CLASS(SimpleDataDrivenExample)
4 TEST_CLASS_PROPERTY(L"Description", L"Simple example in table-based data-driven tests")
5 END_TEST_CLASS()
6
7 TEST_METHOD_CLEANUP(TestCleanup);
8 TEST_METHOD_SETUP(TestSetup);
9
10 BEGIN_TEST_METHOD(DataDrivenTest)
11 TEST_METHOD_PROPERTY(L"DataSource", L"Table:SimpleDataDrivenExample.xml#SimpleTable")
11 END_TEST_METHOD()
12 ...
Verwalteter Code
1 [TestMethod]
2 [DataSource("Table:CSharpDataDrivenSimpleExample.xml#SimpleTable")]
3 public void DataDrivenTest()
4 {
5 ...
6 }
"DataSource" ist eine bekannte Eigenschaft in Microsoft.VisualStudio.TestTools.UnitTesting.
Zusätzlich zu den oben genannten Schritten benötigen Sie einige zusätzliche Schritte für datengesteuerte Tests in verwaltetem Code. Außerdem müssen Sie eine private TestContext-Eigenschaft definieren. Weitere Informationen finden Sie unter TestContext Class. Sie definieren auch öffentliche Prüfer für diese Eigenschaft. Intern legt TAEF diese TestContext-Eigenschaft fest, damit Sie darauf zugreifen können. Sehen Sie sich diesen Codeabschnitt schnell an:
1 public TestContext TestContext
2 {
3 get;
4 set;
5 }
Abrufen von Daten in der Test-Methode
Die Abruf-APIs unterscheiden sich in verwaltetem und systemeigenem Code. Beginnen wir mit dem Verständnis der systemeigenen Abruf-API:
1 void SimpleDataDrivenExample::DataDrivenTest()
2 {
3 int size;
4 if (SUCCEEDED(TestData::TryGetValue(L"size", size)))
5 {
6 VERIFY_ARE_NOT_EQUAL(size, 0);
7 Log::Comment(String().Format(L"Size retrieved was %d", size));
8 }
9
10 String color;
11 if (SUCCEEDED(TestData::TryGetValue(L"color", color)))
12 {
13 Log::Comment(L"Size retrieved was " + color);
14 }
15
16 unsigned int index;
17 if (SUCCEEDED(TestData::TryGetValue(L"index", index)))
18 {
19 Log::Comment(String().Format(L"At index %d", index));
20 }
21 }
Achten Sie besonders auf die Zeilen 4, 11 und 17. Definieren Sie vor jeder dieser Zeilen eine lokale Variable, um die abzurufenden Daten zu speichern. Es ist wichtig, den Typ hier korrekt zu bestimmen. Da Sie "Size" als "int"-Typ in der XML-Datei definiert haben, müssen Sie eine lokale Variable vom Typ "int" definieren, an die sie abgerufen werden soll. Die Abruf-API verwendet den Namen des Parameters, um als Zeichenfolgenwert als ersten Parameter abzurufen. Der zweite Parameter ist die lokale Variable, die per Verweis übergeben und vom TAEF-Code festgelegt wird.
Diese Abruf-API wird in TestData.h definiert und vom WexTestClass.h-Header enthalten, den alle TAEF-Tests enthalten.
Um die Daten in verwaltetem Code abzurufen, verwenden Sie die von Ihnen definierte TestContext-Eigenschaft. Sehen Sie sich den folgenden Code an (oder im Beispiel):
1 public void DataDrivenTest()
2 {
3 int size = (int)m_testContext.DataRow["Size"];
4 Verify.AreNotEqual(size, 0);
5 Log.Comment("Size is " + size.ToString());
6
7 Log.Comment("Color is " + m_testContext.DataRow["Color"]);
8 UInt32 index = (UInt32)m_testContext.DataRow["Index"];
9 Log.Comment("At index " + index.ToString());
10 }
Wenn Sie mit VSTS vertraut sind, werden Sie feststellen, dass das obige Beispiel ähnlich ist. Verwenden Sie DataRow, und geben Sie den Spaltennamen als Namen des Parameters an, den Sie abrufen möchten.
Wenn Sie im Beispiel sehen, gibt es auch einen nicht datengesteuerten Test in derselben Klasse. Mit anderen Worten, Sie haben die Flexibilität, DataDriven- und NonDataDriven-Tests in derselben Testklasse zu kombinieren.
Ausführen von SimpleDataDrivenExample mit TAEF
Stellen Sie sicher, dass Sie wissen, wie Sie datengesteuerte Tests erstellen und wie Sie Tests mit TAEF ausführen , bevor Sie mit Tipps und Tricks zum Ausführen von DataDrivenTests mit TAEF beginnen. Es kann hilfreich sein, Ihr Gedächtnis aufzufrischen, wie Selection mit TAEF funktioniert.
Die Eingabeaufforderung zum Ausführen von datengesteuerten Tests unterscheidet sich nicht von der Ausführung eines generischen Tests mit TAEF. Um beide Beispiele (systemeigene und verwaltete) auszuführen, die oben beschrieben werden, führen Sie einfach den folgenden Befehl aus:
TE.exe Beispiele\CPP.DataDriven.Example.dll Examples\CSharp.DataDriven.Example.dll /name:*Simple*
Das Argument "/name" fügt basierend auf dem Namen ein Auswahlkriterium hinzu und wählt nur die Klassen aus, an denen Sie interessiert sind. Um auszuwählen, welche Tests innerhalb der Klassen ausgeführt werden sollen, sollten Sie zuerst alle Eigenschaften der DLL auflisten. Anschließend können Sie entscheiden, welche Eigenschaften für Auswahlkriterien verwendet werden sollen.
TE.exe Examples\CPP.DataDriven.Example.dll Examples\CSharp.DataDriven.Example.dll /name:*Simple* /listproperties
f:\Examples\CPP.DataDriven.Example.dll
WEX::TestExecution::Examples::SimpleDataDrivenExample
Property[Description] = Simple example in table-based data-driven tests
WEX::TestExecution::Examples::SimpleDataDrivenExample::DataDrivenTest#0
Setup: TestSetup
Teardown: TestCleanup
Property[DataSource] = Table:SimpleDataDrivenExample.xml#SimpleTable
Data[Color] = White
Data[Size] = 4
WEX::TestExecution::Examples::SimpleDataDrivenExample::DataDrivenTest#1
Setup: TestSetup
Teardown: TestCleanup
Property[DataSource] = Table:SimpleDataDrivenExample.xml#SimpleTable
Data[Color] = Black
Data[Size] = 10
WEX::TestExecution::Examples::SimpleDataDrivenExample::DataDrivenTest#2
Setup: TestSetup
Teardown: TestCleanup
Property[DataSource] = Table:SimpleDataDrivenExample.xml#SimpleTable
Data[Color] = Orange
Data[Size] = 9
WEX::TestExecution::Examples::SimpleDataDrivenExample::DataDrivenTest#3
Setup: TestSetup
Teardown: TestCleanup
Property[DataSource] = Table:SimpleDataDrivenExample.xml#SimpleTable
Data[Color] = Blue
Data[Size] = 9
WEX::TestExecution::Examples::SimpleDataDrivenExample::FirstNonDataDrivenTest
Setup: TestSetup
Teardown: TestCleanup
WEX::TestExecution::Examples::SimpleDataDrivenExample::SetsOfDataTest#metadataSet0
Setup: TestSetup
Teardown: TestCleanup
Property[Data:Color] = {Purple, Maroon, Brown}
Data[Color] = Purple
WEX::TestExecution::Examples::SimpleDataDrivenExample::SetsOfDataTest#metadataSet1
Setup: TestSetup
Teardown: TestCleanup
Property[Data:Color] = {Purple, Maroon, Brown}
Data[Color] = Maroon
WEX::TestExecution::Examples::SimpleDataDrivenExample::SetsOfDataTest#metadataSet2
Setup: TestSetup
Teardown: TestCleanup
Property[Data:Color] = {Purple, Maroon, Brown}
Data[Color] = Brown
WEX::TestExecution::Examples::SimpleDataDrivenExample::SecondNonDataDrivenTest
Setup: TestSetup
Teardown: TestCleanup
f:\Examples\CSharp.DataDriven.Example.dll
WEX.Examples.CSharpDataDrivenSimpleExample
Setup: MyClassInitialize
Property[Description] = Simple example in table-based data-driven tests
WEX.Examples.CSharpDataDrivenSimpleExample.DataDrivenTest#0
Property[DataSource] = Table:CSharpDataDrivenSimpleExample.xml#SimpleTable
Data[Color] = White
Data[Size] = 4
WEX.Examples.CSharpDataDrivenSimpleExample.DataDrivenTest#1
Property[DataSource] = Table:CSharpDataDrivenSimpleExample.xml#SimpleTable
Data[Color] = Black
Data[Size] = 10
WEX.Examples.CSharpDataDrivenSimpleExample.DataDrivenTest#2
Property[DataSource] = Table:CSharpDataDrivenSimpleExample.xml#SimpleTable
Data[Color] = Orange
Data[Size] = 9
WEX.Examples.CSharpDataDrivenSimpleExample.DataDrivenTest#3
Property[DataSource] = Table:CSharpDataDrivenSimpleExample.xml#SimpleTable
Data[Color] = Blue
Data[Size] = 9
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
Lassen Sie uns jetzt die oben aufgeführten SetsOfMetadataTest und SetsOfDataTest ignorieren. Wenn Sie neugierig auf diese Themen sind, lesen Sie mehr über leichtgewichtiges, datengesteuertes Testen. Nachdem Sie nun die verschiedenen Eigenschaften und Datenparameternamen und -werte kennen, können Sie bestimmte Tests basierend darauf auswählen. Probieren Sie sie aus, und folgen Sie, um zu bestätigen, was Sie auswählen.
Führen Sie Folgendes aus, um nur die nicht datengesteuerten Tests auszuführen:
TE.exe Beispiele\CSharp.DataDriven.Example.dll Examples\CPP.DataDriven.Example.dll /select:"@Name='*Simple*' Und not(@DataSource=*)"
Um nur die datengetriebenen Tests auszuführen, bei denen die Farbe als "Schwarz" angegeben ist, führen Sie aus:
TE.exe Beispiele\CSharp.DataDriven.Example.dll Examples\CPP.DataDriven.Example.dll /select:"@Name='*Simple*' und @Data:Color='Black'"
Genau wie bei "Color" werden @Data:<DataDrivenParameterName>=<DataDrivenParameterValue> basierend auf dem angegebenen DataDriven-Parameterwert bestimmte Daten ausgeführt. Im obigen Fall wird WEX::TestExecution::Examples::SimpleDataDrivenExample::DataDrivenTest#1 und WEX::Examples::CSharpDataDrivenSimpleExample::DataDrivenTest#1 ausgeführt.
Beachten Sie die Testindizes in den oben genannten Listeneigenschaften. Sie können auch die oben aufgeführte Option basierend auf dem Index auswählen.
TE.exe Beispiele\CSharp.DataDriven.Example.dll Examples\CPP.DataDriven.Example.dll /select:"@Name='*Simple*' And @Data:Index=1"
Das Obige führt dieselben beiden Tests aus, die @Data:Color="Schwarz" ausgewählt hat. Sie fügen der Indexauswahl sogar Schutzvorrichtungen mit @Data:Index > lowerGuardValue und @Data:index< upperGuardValue hinzu.
Wenn Sie die Grundlagen der datengesteuerten Tests mit TAEF verstehen, folgen Sie der nächsten Klasse in denselben Beispielen: Überschreiben von Metadaten auf Zeilenebene, Angeben von Arrayparametertypen.