次の方法で共有


ライトウェイト データ ドリブン テスト

完全な 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 は、このセット内の各値に対して、問題の SetsOfDataTest() のテスト メソッドを 1 回再実行します。

また、メタデータ名は "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 */

マネージド コードの操作中、データ セットの指定と取得はネイティブの例とよく似ています。 見てみましょう。

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 (マネージド コード内) になります。

複数のデータ値を指定すると、すべての可能な値のデカルト積が取得され、各組み合わせに対してテスト メソッドが呼び出されます。

さらに、同じテスト メソッドに対して、一部のメタデータ セット (ThreadingModel メタデータ セットなど) と、データ セットを指定することもできます。 このような場合、すべてのメタデータ セットとデータ セットの組み合わせ拡張が TAEF によって生成され、問題テスト メソッドがすべての組み合わせで呼び出されます。

特殊なケース - メタデータまたはデータのセットを使用したデータ ドリブン テスト

テーブル ベースのデータ ドリブン テストに依存するテスト メソッドを使用したり、それに対するデータまたはメタデータのセットを指定したりすることもできます。 たとえば、テスト メソッドでは、テーブル ベースのデータ ドリブン テストでパラメーター "size" と "color" を指定し、"transparency" パラメーターを true に設定してすべての行を 1 回実行し、その後 false に設定することができます。 このような場合、データ ドリブン テストのセット "{true, false}" として "transparency" を指定できます。 メタデータ セット内のパラメーターとテーブル ベースのデータ ドリブン行が競合する場合は、行レベルのパラメーターの型と値によってメタデータ セットの値がオーバーライドされることに注意してください。

データ/メタデータのセットを使用したテストの実行

データセットを含むテストの実行は非常に直感的です。 テスト例の /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 の場合、このメソッドの 2 回目の呼び出しでは、セットからのアクティブなパラメーター値は "Maroon" です

テーブル ベースのデータ ドリブン テストの場合と同様に、データ値または名前を選択できます。 たとえば、/select:@Data:Color='Maroon'/name:*#metadataSet1 などの選択クエリで SetsOfDataTest#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