簡單資料驅動測試範例
本節說明數個數據驅動測試範例,並涵蓋每個範例中的特定功能。
第一個範例是稱為 SimpleDataDrivenExample 的基本資料驅動測試。
在 Managed 範例中,您會發現如下所示的 XML 檔案:
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>
此 XML 檔案會定義要取用之資料驅動測試的資料參數。 頂端 XML 節點是< 資料 >標籤,其中可能包含在其中定義的一或多個 < 資料表 >標籤。 每個資料表都必須與唯一的 「ID」 屬性相關聯。 測試函式會使用資料表識別碼值來識別它們將在 XML 檔案中使用的特定資料表。
在 [ < 資料表] > 標籤內,您有選擇性< 的 ParameterTypes 區 >段。 您可以在這裡使用< ParameterTypes 標記明確指定指定參數的 >資料類型。 在上述範例中,您明確指定參數 「Size」 為 「Int32」 類型,而參數 「Color」 是字串。 摘要說明: ParameterTypes 區段是選擇性的。根據預設,如果未提供參數類型資訊,則會儲存為字串。
如果您比較 Managed 和 Native 範例,您會發現兩者之間的唯一差異是< ParameterTypes >區塊。 原生 XML 檔案會指定 Size 為原生整數類型 「int」,並使用預設類型 WEX::Common::String 做為 Color 的類型,方法是不指定它。 為了方便起見,下列範例會顯示原生範例中的 XML 檔案。
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>
原生和Managed程式碼中支援的參數類型會列在資料表資料來源的參數類型中。
如果指定了任何其他資料類型,測試將會擲回警告,並將它視為 String。
在 XML 檔案中的 ParameterTypes > 區塊之後 < ,繼續使用 XML 檔案,您有一組< 相同的 Row > ,分別對應至 Managed 和原生範例中的一組資料。 在此特定案例中,您有 4 組資料會透過 4 < 個數據列 > 區塊來定義,每個區塊都會使用< Parameter >標記來指定參數的值。
這涵蓋資料來源檔案各種部分的基本概念。 現在讓我們看看如何擷取您在上述 XML 檔案中指定的值。
撰寫測試以作為資料驅動測試
現在已指定資料,您需要一種方式來建立程式碼或測試方法的關聯,以在 XML 檔案中使用此資料。 您可以藉由指定 「DataSource」 中繼資料,在 Managed 和原生範例中執行這項操作。 DataSource 中繼資料有三個部分:
- 'Table:' - 這會將資料來源識別為 XML 資料表。
- 'DataDrivenTests.xml' - 這是包含 XML 資料表的檔案。
- '#Table2' - 在 '#' delimeter 之後,'Table2' 值會識別要使用的 XML 檔內的特定資料表。 單一 XML 資料表資料來源可以包含多個資料表。 TAEF 會查看具有符合指定值之 'Id' 屬性之 Table 元素的 XML 檔案。
同樣地,讓我們快速查看涵蓋上述層面的程式碼。
機器碼
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 ...
Managed 程式碼
1 [TestMethod]
2 [DataSource("Table:CSharpDataDrivenSimpleExample.xml#SimpleTable")]
3 public void DataDrivenTest()
4 {
5 ...
6 }
「DataSource」 是 Microsoft.VisualStudio.TestTools.UnitTesting 中的已知屬性。
除了上述專案外,您需要一些額外的步驟,才能在 Managed 程式碼中執行資料驅動測試。 您也需要定義私人 TestCoNtext 屬性。 如需詳細資訊,請參閱 TestCoNtext 類別。 您也會定義此屬性的公用評定者。 在內部 TAEF 會設定此 TestCoNtext 屬性,以便您可以透過它存取資料。 讓我們快速查看這部分的程式碼:
1 public TestContext TestContext
2 {
3 get;
4 set;
5 }
在 Test 方法中擷取資料
擷取 API 在 Managed 和機器碼中不同。 讓我們從瞭解 原生擷取 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 }
請特別注意第 4、11 和 17 行。 在每一行之前,請定義區域變數來儲存您將擷取的資料。 請務必在這裡取得類型。 由於您已將 「Size」 定義為 XML 檔案中的 「int」 類型,因此您必須定義 int 類型的區域變數以擷取它。 擷取 API 會採用 參數的名稱,以字串值作為其第一個參數來擷取。 第二個參數是以傳址方式傳入的區域變數,並由 TAEF 程式碼設定。
此擷取 API 定義于 TestData.h 中,並由 WexTestClass.h 標頭包含所有 TAEF 測試包含。
若要擷取 Managed 程式 代碼中的資料,請使用您定義的 TestCoNtext 屬性。 請查看下列程式碼 (或範例) :
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 }
如果您熟悉 VSTS,您會發現上述範例類似。 使用 DataRow,並將資料行名稱指定為您嘗試擷取的參數名稱。
如果您查看此範例,相同類別中也有非資料驅動測試。 換句話說, 您可以彈性地在相同的測試類別中結合 DataDriven 和 NonDataDriven 測試。
使用 TAEF 執行 SimpleDataDrivenExample
開始使用 TAEF 執行 DataDrivenTests 的秘訣和訣竅之前,請確定您已瞭解如何 撰寫資料驅動測試 ,以及如何使用 TAEF 執行測試 。 重新整理 選取 專案與 TAEF 搭配運作方式可能很有説明。
執行資料驅動測試的命令提示字元與使用 TAEF 執行任何一般測試並無不同。 若要執行上述兩個範例 (原生和受控) ,只要執行下列命令:
TE.exe Examples\CPP.DataDriven.Example.dll Examples\CSharp.DataDriven.Example.dll /name:*Simple*
'/name' 會根據名稱新增選取準則,並只選擇您感興趣的類別。 若要選取要在類別內執行的測試,您應該先列出 dll 的所有屬性。 然後,您可以決定要用於選取準則的屬性。
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
現在,讓我們忽略上面所列的 SetsOfMetadataTest 和 SetsOfDataTest。 如果您想要瞭解這些內容,請閱讀 輕量型資料驅動測試。 現在您已知道各種屬性和資料參數名稱和值,您可以根據該屬性選取特定測試。 試試看並跟著做,以確認您選取的內容。
若要只執行非資料驅動測試,請執行:
TE.exe Examples\CSharp.DataDriven.Example.dll Examples\CPP.DataDriven.Example.dll /select:「@Name='*Simple*' And not (@DataSource=*) 」
現在,若要只執行這些資料驅動測試,其中色彩指定為「黑色」,請執行:
TE.exe Examples\CSharp.DataDriven.Example.dll Examples\CPP.DataDriven.Example.dll /select:「@Name='*Simple*' and @Data:Color= 'Black'」
就像您使用 「Color」 一樣,@Data: < DataDrivenParameterName > = < DataDrivenParameterValue > 會根據指定的 DataDriven參數值來執行特定資料。 在上述案例中,它會執行 WEX::TestExecution::Examples::SimpleDataDrivenExample::D ataDrivenTest#1 和 WEX。Examples.CSharpDataDrivenSimpleExample.DataDrivenTest#1
請注意上述 listproperties 中的 測試索引 。 您也可以根據索引選取上述專案。
TE.exe Examples\CSharp.DataDriven.Example.dll Examples\CPP.DataDriven.Example.dll /select:「@Name='*Simple*' and @Data:Index=1 」
上述會執行 「黑色」選取的相同兩項測試 @Data:Color= 。 您甚至使用@Data:Index > lowerGuardValue 和 @Data:index< upperGuardValue將防護新增至索引選取範圍
如果您瞭解使用 TAEF 進行資料驅動測試的基本概念,請遵循相同範例中的下一個類別:覆寫資料 列層級的中繼資料, 指定陣列參數類型。