輕量型數據驅動測試
在某些情況下,完整的 XML DataSource 和數據表型數據驅動測試可能太重,而您的測試案例需求可能太重。 輕量型數據驅動測試可讓您在測試的數據簡單且輕鬆地以元數據表示時,取得數據驅動測試支援。 讓我們使用範例,看看如何。
輕量型數據驅動測試的數據會以一組元數據表示(在測試、類別或模組層級)。 針對這個集合中的每個值,測試方法會與相關聯的設定和卸除方法一起,針對集合中的每個值執行。 讓我們看看如何在機器碼中撰寫此程式代碼:
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 };
請注意第 14 行中TEST_METHOD_PROPERTY的參數值。 測試元數據值會以 「{」 開頭,並以 「}」 結尾,表示已指定逗號或分號分隔的值清單。 TAEF 會針對此集合中的每個值重新執行測試方法,SetOfDataTest() 一次。
另請注意,元數據名稱開頭為 “Data:”。 這表示元數據集確實會指定數據驅動測試參數的變化,而且實際測試方法會與數據表型數據驅動測試中的數據參數類似,如下所示:
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 */
使用 Managed 程式代碼時,數據集的規格和擷取與原生範例非常類似。 讓我們來看一下:
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 }
就像數據表型數據驅動測試一樣,指定為元數據的數據集將允許透過TestContext.DataRow進行擷取。請注意,若要保留數據驅動測試的輕量,參數類型一律為 WEX::Common::String(在機器碼中)和 String(在 Managed 程式代碼中)
如果指定了多個數據值,則會取得所有可能值的笛卡兒乘積,並針對每個組合叫用測試方法。
進一步可以有一些元數據集(例如 ThreadingModel 元數據集),以及為相同測試方法指定的數據集。 在這種情況下,TAEF 會產生所有元數據集和數據集的結合擴充,而且每個組合都會叫用相關的測試方法。
特殊案例 - 具有一組元數據或數據的數據驅動測試
您可以讓測試方法相依於數據表型數據驅動測試,併為其指定一組數據或元數據。 例如,測試方法可以在數據表型數據驅動測試中指定參數 「size」 和 「color」,並且希望所有數據列都執行一次,並將 「transparency」 參數設定為 true,然後將 設定為 false。 在這種情況下,可以將「透明度」指定為數據驅動測試的集合 “{true, false}”。 請務必注意,在元數據集verses資料表中參數衝突時,數據列層級參數類型和值將會覆寫元數據集值。
使用數據集/元數據執行測試
執行包含數據集的測試相當直覺。 讓我們看看範例測試的 /listproperties 輸出:
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
請注意上述範例中的第 7、12 和 17 行。 元數據集索引會附加至測試方法的每個叫用,以及數據集中的值。 此索引的格式如下:
<namespace qualified test method name>#metadataSet<metadataIndex>
第 8、13 和 18 行會顯示已針對這個羽量型數據驅動測試支援所指定的元數據集。 在此情況下,集合包含紫色、馬龍和棕色的色彩。 第 10、15 和 20 行會顯示此集合中的實際值,這是目前測試調用的作用中。 在 SetsOfMetadataTest#metadataSet1 的情況下,這個方法的第二個調用是 “Maroon” 集合中的使用中參數值
您可以選取 [資料] 值或名稱,就像在數據表型數據驅動測試中一樣。 例如,您可以選取選取查詢的 SetsOfDataTest#metadataSet1,例如 /select:@Data:Color='Maroon' 或 /name:*#metadataSet1
如需快速參考,來自受控測試範例的 /listproperties 輸出如下所示:
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