共用方式為


簡單的資料驅動測試範例

本節說明資料驅動測試的數個範例,並涵蓋每個範例中的特定功能。

第一個範例是基本資料驅動測試,稱為 SimpleDataDrivenExample。

在受管理範例中,您會找到如下所示的 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 節點是 <Data> 標籤,其中可能包含 其中定義的一或多個 <Table> 標籤。 每個表都需要與唯一的「ID」屬性相關聯。 測試函式會使用表格 ID 值來識別它們將在 XML 檔中使用的特定表格。

在< Table> 標籤中,您有一個選擇性的 < 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 檔案,兩個 XML 檔案中的 <ParameterTypes> 區塊之後,您會發現有一組相同的<資料列>,每一個資料列對應於我們的受控和本機範例中的一組資料。 在此特殊情況下,您有 4 組資料,透過 4 <個 Row> 區塊定義,每個區塊都使用 Parameter> 標籤指定<參數的值。

這涵蓋了資料來源檔案各個部分的基本基礎知識。 現在讓我們看看如何擷取您在上述 XML 檔案中指定的值。

將測試編寫為資料驅動測試

現在已指定資料,您需要一種方法來將取用資料的程式碼或測試方法與 XML 檔案中的此資料相關聯。 您可以在受控和原生範例中執行此動作,方法是指定 “DataSource” 中繼資料。 DataSource 的中繼資料包含三個部分。

  1. 'Table:' - 這會將數據源識別為 XML 數據表。
  2. 'DataDrivenTests.xml' - 這是包含 XML 資料表的檔案。
  3. '#Table2' - 在 '#' delimeter 之後,'Table2' 值會識別要使用的 XML 檔中的特定數據表。 單一 XML 數據表數據來源可以包含多個數據表。 TAEF 會查看 Table 元素的 XML 檔案,其中包含符合指定值的 『Id』 屬性。

再次,讓我們快速瀏覽一下涵蓋上述方面的程式碼。

原生程式碼

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     ...

受控程式碼

    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 }

擷取測試方法中的資料

擷取 API 在受控和原生程式碼中有所不同。 讓我們從了解 本機檢索 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號線。 在每一行之前,定義一個局部變數來儲存您將擷取的資料。 正確類型選擇很重要。 由於您在 XML 檔案中將 “Size” 定義為 “int” 類型,因此您必須定義 int 類型的區域變數才能擷取到它。 擷取 API 會採用要擷取的參數名稱作為 String 值作為其第一個參數。 第二個參數是藉著參考傳入並由 TAEF 程式代碼設定的區域變數。

此擷取 API 定義在 TestData.h 中,並包含在所有 TAEF 測試所包含的 WexTestClass.h 標頭中。

若要擷取 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 執行測試 ,再開始使用 TAEF 執行 DataDrivenTests 的秘訣和訣竅。 重新整理您對 TAEF 中 [選取] 的操作方式的記憶,可能會有幫助。

執行數據驅動測試的命令提示字元與使用 TAEF 執行任何泛型測試沒有太大差異。 若要執行上述兩個範例 (原生和受控),只需執行下列命令:

範例TE.exe /name:*簡單*\CPP.DataDriven.Example.dll Examples\CSharp.DataDriven.Example.dll

'/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 /select:“@Name='*Simple*' And not(@DataSource=*)”\CSharp.DataDriven.Example.dll Examples\CPP.DataDriven.Example.dll 範例

現在,若要只執行那些資料驅動測試,其中色彩指定為「黑色」,請執行:

TE.exe /select:“@Name='*simple*' 和 @Data:Color='black'”\CSharp.DataDriven.Example.dll Examples\CPP.DataDriven.Example.dll 範例

就像您使用 “Color” 一樣, @Data:<DataDrivenParameterName>=<DataDrivenParameterValue> 會根據指定的 DataDriven 參數值執行特定資料。 在上述情況下,它將運行 WEX::TestExecution::Examples::SimpleDataDrivenExample::DataDrivenTest#1 和 WEX.Examples.CSharpDataDrivenSimpleExample.DataDrivenTest#1

請注意上面清單中的 測試索引 屬性。 您也可以根據索引選擇上述內容。

TE.exe 例子\CSharp.DataDriven.Example.dll Examples\CPP.DataDriven.Example.dll /select:“@Name='*Simple*' 和 @Data:Index=1”

上述將運行 “Black” 所選的相同兩個@Data:Color= 測試。 您甚至可以使用 @Data:Index lowerGuardValue > 和 @Data:index< upperGuardValue 將防護新增至索引選取範圍

如果您瞭解使用 TAEF 進行數據驅動測試的基本概念,請參考同一範例中的下一課:覆蓋資料列層級的中繼資料指定陣列參數類型