本節涵蓋以範例方式進行數據驅動測試的一些進階功能。 如果您還在學習基礎知識,可以考慮從簡單的資料驅動示例開始。
參考的範例:
中繼資料覆寫資料驅動範例
DataDrivenMetadataOverriding範例
如果您將本節中涵蓋的範例與 「簡單資料驅動範例」 頁面中涵蓋的範例進行比較,您會注意到唯一的差異是已新增測試中各個層級的中繼資料和屬性。 讓我們先看看如何撰寫基本測試。
在本機範例中,請觀察以下程式碼範例中的第 5 行和第 10 行:
1 class MetadataOverridingDataDrivenExample
2 {
3 BEGIN_TEST_CLASS(MetadataOverridingDataDrivenExample)
4 ...
5 TEST_CLASS_PROPERTY(L"Priority", L"2")
6 END_TEST_CLASS()
7
8 BEGIN_TEST_METHOD(DataDrivenTest)
9 ...
10 TEST_METHOD_PROPERTY(L"Owner", L"wex")
11 END_TEST_METHOD()
12 }
因此,類別 “MetadataOverridingDataDrivenExample” 中定義的所有測試的優先順序均為 2。 請記住,測試可以覆蓋在其之上層級(類別或模組)上指定的任何元資料。 在此情況下,DataDrivenTest 方法仍會維持 2 的優先順序,並將其 “Owner” 定義為 “WEX”。 現在,如果這是一個非數據驅動的測試,您可以根據其中任何一個進行選擇,/select:“@Priority=2” 或 /select:“@Owner='WEX'”,並在其中執行測試方法。 但 使用資料驅動測試時,您可以在「資料列」層級指定中繼資料,以便進一步覆寫適用於測試方法層級的屬性。
讓我們看看 XML 檔案以了解如何操作。
1 <?xml version="1.0"?>
2 <Data>
3 <Table Id="MetadataTable">
4 <ParameterTypes>
5 <ParameterType Name="Size">int</ParameterType>
6 </ParameterTypes>
7 <Row Priority="1">
8 <Parameter Name="Size">4</Parameter>
9 <Parameter Name="Color">White</Parameter>
10 </Row>
11 <Row Owner="C2">
12 <Parameter Name="Size">10</Parameter>
13 <Parameter Name="Color">Black</Parameter>
14 </Row>
15 <Row Priority="1" Owner="C3">
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>
在前 3 列中,範例會藉由明確指定特定資料值集的中繼資料來覆寫某些中繼資料。 不過,最後一組資料具有與包含它的方法相同的中繼資料:Priority=2 和 Owner=WEX。
在研究這些測試的選擇和執行之前,讓我們先看看託管代碼。
1 [TestClass]
2 public class DataDrivenMetadataOverridingExample
3 {
4 [ClassInitialize]
5 [Priority(2)]
6 public static void MyClassInitialize(Object testContext)
7 {
8 }
9
9 [TestMethod]
10 ...
11 [TestProperty("Owner", "WEX")]
12 public void DataDrivenTest()
13 {
14 ...
15 }
...
您在這裡也一模一樣地模仿了原始範例的屬性。
現在,讓我們更好地理解覆蓋:
TE.exe Examples\CSharp.DataDriven.Example.dll /select:"@Name='*overriding*' and @Priority=1"
將運行
- WEX.Examples.DataDrivenMetadataOverridingExample.DataDrivenTest#0
- WEX.Examples.DataDrivenMetadataOverridingExample.DataDrivenTest#2
TE.exe Examples\CPP.DataDriven.Example.dll /select:"@Name='*overriding*' and @Priority=1"
將執行:
- WEX::TestExecution::Examples::MetadataOverridingDataDrivenExample::DataDrivenTest#0
- WEX::TestExecution::Examples::MetadataOverridingDataDrivenExample::DataDrivenTest#2
給讀者的練習
作為練習,請嘗試新增新的中繼資料值。 僅改變上述範例中的選擇標準,
/select:"@Name='*overriding*' and @Owner='WEX'"
將在託管和原生示例中運行索引 #0 和 #3 的數據驅動測試
/select:"@Name='*overriding*' and @Priority=2"
會使用索引 #1 和 #3 執行資料驅動測試,並在受控範例中執行 NonDataDrivenTest
TE.exe Examples\CPP.DataDriven.Example.dll Examples\CSharp.DataDriven.Example.dll /name:*overriding* /listproperties
F:\ Examples\CPP.DataDriven.Example.dll
WEX::TestExecution::Examples::MetadataOverridingDataDrivenExample
Property[Priority] = 2
WEX::TestExecution::Examples::MetadataOverridingDataDrivenExample::DataDrivenTest#0
Property[Owner] = WEX
Property[Priority] = 1
Property[DataSource] = Table:MetadataOverridingDataDrivenExample.xml#MetadataTable
Data[Color] = White
Data[Size] = 4
WEX::TestExecution::Examples::MetadataOverridingDataDrivenExample::DataDrivenTest#1
Property[Owner] = C2
Property[DataSource] = Table:MetadataOverridingDataDrivenExample.xml#MetadataTable
Data[Color] = Black
Data[Size] = 10
WEX::TestExecution::Examples::MetadataOverridingDataDrivenExample::DataDrivenTest#2
Property[Owner] = C3
Property[Priority] = 1
Property[DataSource] = Table:MetadataOverridingDataDrivenExample.xml#MetadataTable
Data[Color] = Orange
Data[Size] = 9
WEX::TestExecution::Examples::MetadataOverridingDataDrivenExample::DataDrivenTest#3
Property[Owner] = WEX
Property[DataSource] = Table:MetadataOverridingDataDrivenExample.xml#MetadataTable
Data[Color] = Blue
Data[Size] = 9
F:\ Examples\CSharp.DataDriven.Example.dll
WEX.Examples.DataDrivenMetadataOverridingExample
Setup: MyClassInitialize
Property[Priority] = 2
WEX.Examples.DataDrivenMetadataOverridingExample.DataDrivenTest#0
Property[DataSource] = Table:CSharpDataDrivenMetadataOverridingExample.xml#MetadataTable
Property[Owner] = WEX
Property[Priority] = 1
Data[Color] = White
Data[Size] = 4
WEX.Examples.DataDrivenMetadataOverridingExample.DataDrivenTest#1
Property[DataSource] = Table:CSharpDataDrivenMetadataOverridingExample.xml#MetadataTable
Property[Owner] = C2
Data[Color] = Black
Data[Size] = 10
WEX.Examples.DataDrivenMetadataOverridingExample.DataDrivenTest#2
Property[DataSource] = Table:CSharpDataDrivenMetadataOverridingExample.xml#MetadataTable
Property[Owner] = C3
Property[Priority] = 1
Data[Color] = Orange
Data[Size] = 9
WEX.Examples.DataDrivenMetadataOverridingExample.DataDrivenTest#3
Property[DataSource] = Table:CSharpDataDrivenMetadataOverridingExample.xml#MetadataTable
Property[Owner] = WEX
Data[Color] = Blue
Data[Size] = 9
WEX.Examples.DataDrivenMetadataOverridingExample.NonDataDrivenTest