Datengesteuerte Tests mit geringem Gewicht
Es gibt wahrscheinlich Szenarien, in denen ein vollständiges XML DataSource- und table-basiertes datengesteuertes Testen für Ihre Testszenarioanforderungen zu stark sein kann. Einfache, datengesteuerte Tests ermöglichen eine schnelle und einfache Möglichkeit, datengesteuerte Tests zu erhalten, wenn die Daten für Ihren Test einfach sind und einfach als Metadaten ausgedrückt werden können. Lassen Sie uns ein Beispiel verwenden und sehen, wie das geht.
Die Daten für den datengesteuerten Test mit geringem Gewicht werden als Eine Reihe von Metadaten (auf Test-, Klassen- oder Modulebene) ausgedrückt. Für jeden der Werte in diesem Satz werden die bedenklich stehenden Testmethoden zusammen mit den zugehörigen Setup- und Teardownmethoden für jeden Wert in der Gruppe ausgeführt. Sehen wir uns an, wie Sie dies in systemeigenem Code erstellen:
1 #include "WexString.h"
2 #include "WexTestClass.h"
3
4 using namespace WEX::Common;
5 using namespace WEX::TestExecution;
6 using namespace WEX::Logging;
7 namespace WEX { namespace TestExecution { namespace Examples
8 {
9 class SimpleDataDrivenExample
10 {
11 TEST_CLASS(SimpleDataDrivenExample);
12 ...
13 BEGIN_TEST_METHOD(SetsOfDataTest)
14 TEST_METHOD_PROPERTY(L"Data:Color", L"{Purple, Maroon, Brown}")
15 END_TEST_METHOD()
16 };
Beachten Sie die Parameterwerte für TEST_METHOD_PROPERTY in Zeile 14. Der Wert der Testmetadaten beginnt mit einem "{" und endet mit einem "}", der angibt, dass eine durch Semikolons getrennte Liste von Werten angegeben wurde. TAEF führt die bedenkliche Testmethode erneut aus, SetsOfDataTest() einmal für jeden Wert in diesem Satz.
Beachten Sie außerdem, dass der Metadatenname mit einem "Data:" beginnt. Dies bedeutet, dass der Metadatensatz tatsächlich Variationen für die datengesteuerten Testparameter angibt und der tatsächlichen Testmethode ähnlich wie Datenparameter aus einem tabellenbasierten datengesteuerten Test verfügbar wäre:
11 ...
12
13 void SimpleDataDrivenExample::SetsOfDataTest()
14 {
15 String color;
16 if (SUCCEEDED(TestData::TryGetValue(L"color", color)))
17 {
18 Log::Comment(L"Color retrieved was " + color);
19 }
20 }
21 } /* namespace Examples */ } /* namespace TestExecution */ } /* namespace WEX */
Beim Arbeiten mit verwaltetem Code ähnelt die Spezifikation und der Abruf des Datasets dem systemeigenen Beispiel. Sehen wir uns das einmal genauer an:
1 namespace WEX.Examples
2 {
3 using Microsoft.VisualStudio.TestTools.UnitTesting;
4 using System;
5 using System.Collections;
6 using System.Data;
7 using WEX.Logging.Interop;
8 using WEX.TestExecution;
9
10 [TestClass]
11 public class CSharpDataDrivenSimpleExample
12 {
13 ...
14 [TestMethod]
15 [TestProperty("Data:Color", "{Red, Green, Blue}")]
16 public void SetsOfMetadataTest()
17 {
18 Log.Comment("Color is " + m_testContext.DataRow["Color"]);
19 }
20
21 public TestContext TestContext
22 {
23 get { return m_testContext; }
24 set { m_testContext = value; }
25 }
26
27 private TestContext m_testContext;
28 }
29 }
Genau wie bei tabellenbasierten datengesteuerten Tests ermöglichen Datengruppen, die als Metadaten angegeben werden, das Abrufen über TestContext.DataRow.Beachten Sie, dass der Parametertyp immer WEX::Common::String (in systemeigenem Code) und String(in verwaltetem Code) ist, um die datengesteuerte Testgewichtung beizubehalten.
Wenn mehrere Datenwerte angegeben werden, wird ein kartesisches Produkt aller möglichen Werte abgerufen, und die Testmethode wird für jede Kombination aufgerufen.
Es ist weiterhin möglich, einige Metadatensätze (z . B. ThreadingModel-Metadatensätze) sowie Datensätze für dieselbe Testmethode anzugeben. In einem solchen Fall wird eine kombinatorische Erweiterung aller Metadatensätze und Datensätze von TAEF erstellt, und die bedenklichen Testmethoden werden mit jeder Kombination aufgerufen.
Sonderfälle – datengesteuerter Test mit einer Reihe von Metadaten oder Daten
Sie könnten eine Testmethode haben, die vom datengesteuerten Test "Table" abhängig ist, sowie eine Reihe von Daten oder Metadaten dafür angeben. Eine Testmethode könnte z. B. Parameter "size" und "color" aufweisen, die im tabellenbasierten datengesteuerten Test angegeben sind und möchten, dass alle Zeilen einmal ausgeführt werden sollen, wobei der Parameter "transparenz" auf "true" festgelegt und dann auf "false" festgelegt ist. In einem solchen Fall könnte "Transparenz" als Satz "{true, false}" für den datengesteuerten Test angegeben werden. Es ist wichtig zu beachten, dass im Falle von Konflikten mit Parametern in einem Metadatensatz tabellenbasierten datengesteuerten Zeile der Parametertyp und der Wert auf Zeilenebene den Metadatensatzwert überschreiben.
Ausführen von Tests mit Datengruppen/Metadaten
Die Ausführung von Tests, die Datensätze enthalten, ist ziemlich intuitiv. Sehen wir uns die Ausgabe "/listproperties" für unsere Beispieltests an:
1 te Examples\CPP.DataDriven.Example.dll /name:*SetsOfDataTest* /listproperties
2
3 Test Authoring and Execution Framework v2.9.3k for x64
4
5 f:\ Examples\CPP.SimpleDataDriven.Example.dll
6 WEX::TestExecution::Examples::SimpleDataDrivenExample<
7 WEX::TestExecution::Examples::SimpleDataDrivenExample::SetsOfDataTest#metadataSet0
8 Property[Data:Color] = {Purple, Maroon, Brown}
9
10 Data[Color] = Purple
11
12 WEX::TestExecution::Examples::SimpleDataDrivenExample::SetsOfDataTest#metadataSet1
13 Property[Data:Color] = {Purple, Maroon, Brown}
14
15 Data[Color] = Maroon
16
17 WEX::TestExecution::Examples::SimpleDataDrivenExample::SetsOfDataTest#metadataSet2
18 Property[Data:Color] = {Purple, Maroon, Brown}
19
20 Data[Color] = Brown
Beachten Sie die Zeilen 7, 12 und 17 im obigen Beispiel. Ein Metadatensatzindex wird an jeden Aufruf der Testmethode mit dem Wert im Dataset angefügt. Dieser Index weist das Format auf:
<namespace qualified test method name>#metadataSet<metadataIndex>
Die Zeilen 8, 13 und 18 zeigen den Metadatensatz an, der für diese datengesteuerte Testunterstützung mit geringem Gewicht angegeben wurde. In diesem Fall besteht der Satz aus Farben Lila, Maroon und Braun. Die Zeilen 10, 15 und 20 zeigen den tatsächlichen Wert aus diesem Satz an, der für den aktuellen Aufruf des Tests aktiv ist. Im Fall von SetsOfMetadataTest#metadataSet1, dem zweiten Aufruf dieser Methode, lautet der wert des aktiven Parameters aus dem Satz "Maroon"
Sie können den Datenwert oder den Namen genau wie in tabellenbasierten datengesteuerten Tests auswählen. Sie können beispielsweise "SetsOfDataTest#metadataSet1" auswählen, indem Sie eine Auswahlabfrage wie /select:@Data:Color='Maroon' oder /name:*#metadataSet1
Eine Kurzübersicht zeigt die Ausgabe "/listproperties" aus dem Beispiel für den manged-Test unten:
te Examples\CSharp.DataDriven.Example.dll /name:*SetsOfMetadataTest* /listproperties
Test Authoring and Execution Framework v2.9.3k for x64
f:\ Examples\CSharp.DataDrivenSimple.Example.dll
WEX.Examples.CSharpDataDrivenSimpleExample
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