次の方法で共有


配列サポート データ ドリブン テストの例

このセクションでは、例を使用してデータ ドリブン テストのいくつかの高度な機能について説明します。 まだ基本について説明している場合は、単純なデータ ドリブンの例のから始める必要があります。

参照される例:

  • ArraySupportDataDrivenExample

  • CSharpDataDrivenArraySupportExample

前のセクションでは、データ ドリブン テストの作成と実行の基本について既に説明しました。 次の一覧では、TAEF データ ドリブン テストの意味で 配列の意味について説明します。

  • 配列は、1 つのパラメーターとして扱われる要素の可変長の同種型セットです。
  • 配列型を指定するには、ParameterTypes ブロックでパラメーターの型を明示的に指定し、Array="true" 属性を追加する必要があります。

サポートされているパラメーターの型については、「テーブル データ ソース のパラメーター型に関するページを参照してください。

他のデータ型が指定されている場合、テストは警告をスローし、文字列と見なします。 配列の場合、データ型は String[] 型と見なされます。

次の例は、パラメーターが基本型の 1 つの配列であることを指定する方法を示しています。 配列の場合は、既定の型が使用できないことに注意してください。型を明示的に指定し、パラメーターの Array 属性を true に設定する必要があります。

1  <?xml version="1.0"?>
2  <Data>
3    <Table Id="ArraySupportTable">
4      <ParameterTypes>
5        <ParameterType Name="Size" Array="true">int</ParameterType>
6        <ParameterType Name="Color" Array="true">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">
14         <Value>4</Value>
15         <Value>6</Value>
16         <Value>8</Value>
17       </Parameter>
18       <Parameter Name="Color">
19         <Value>Red</Value>
20         <Value>Green</Value>
21         <Value>Blue</Value>
22       </Parameter>
23     </Row>
24     <Row>
25       <Parameter Name="Size">
26         <Value>9</Value>
27         <Value>12</Value>
28         <Value>16</Value>
29       </Parameter>
30       <Parameter Name="Color">Orange</Parameter>
31     </Row>
32     <Row>
33       <Parameter Name="Size">9</Parameter>
34       <Parameter Name="Color">
35         <Value>White</Value>
36         <Value>Black</Value>
37       </Parameter>
38     </Row>
39   </Table>
40 </Data>

上記の例では、 タグと Array 属性を調べます。 まず、Size パラメーターと Color パラメーターの両方の型を明示的に指定し、Array 属性を true に設定して、これらのパラメーターを配列指定する必要があります。 次に、<Value>...</Value> タグの値を指定します。 <Value> タグは、指定された Row パラメーターに対して配列内の任意の数の値を指定する必要があります。

上記の XML 例の 9 行目、10 行目、30 行目、33 行目に注目してください。 これらのエントリは、単一の値を持つ配列要素です。 つまり、、<Value> タグを追加せずに、<Parameter> タグに単一の値を持つ配列要素を直接指定できます。 また、行のパラメーターに値が 1 つしかない場合でも、1 つの要素の配列として扱われ、それ以外の場合は取得できません。

次に、取得 API を見てみましょう。

ネイティブ取得

WEX::TestExecution::TestDataArray<> テンプレート クラスを使用して、ネイティブ コードで配列要素を取得できます。 詳細については、発行されたヘッダー TestData.h を参照してください。 TestDataArray クラスは、配列要素の有効期間を管理し、配列内の特定の値を取得するための便利な API を提供します。

1  namespace WEX { namespace TestExecution
2  {
3      template <typename T>
4      class TECOMMON_API TestDataArray sealed
5      {
6         ...
7      public:
8          TestDataArray();
9          ~TestDataArray();
10         const size_t GetSize() const;
11         T& operator[](size_t index);
12
13     private:
14        ...
15     };
16 } /* namespace TestExecution */ } /* namespace WEX */

配列の長さを取得するには、getSize 呼び出し、演算子 []を使用して特定の要素を取得できます。

次の例は、コードでこれらの関数を使用する方法を示しています。 ネイティブの例の cpp ファイルを考えてみましょう。

1  TestDataArray<int> sizes;
2  if (SUCCEEDED(TestData::TryGetValue(L"size", sizes)))
3  {
4      size_t count = sizes.GetSize();
5      for (size_t i = 0; i < count; ++i)
6      {
7          Log::Comment(String().Format(L"Size[%d] retrieved was %d", i, sizes[i]));
8      }
9  }
10
11 TestDataArray<String> colors;
12 if (SUCCEEDED(TestData::TryGetValue(L"color", colors)))
13 {
14     size_t count = colors.GetSize();
15     for (size_t i = 0; i < count; ++i)
16     {
17         Log::Comment(String().Format(L"Color[%d] retrieved was ", i) + colors[i]);
18     }
19 }

まず、配列型のローカル TestDataArray を定義します。 この場合、サイズ は int 型の配列であり、 は WEX::Common::String 型の配列です。 配列を取得する API は、任意の変数を取得する API に似ています。 TestData::TryGetValue 呼び出し、パラメーター サイズを取得するように依頼し、のサイズローカル変数に値を配置します。

配列に指定されていないパラメーターを取得しようとすると、エラーが発生し、テストが失敗します。 同様に、配列に要素が 1 つしかない場合でも、配列を配列以外の変数に取り込もうとすると、エラーが発生します。

XML 行に配列パラメーターが指定されていない場合、パラメーターの取得は失敗します。 たとえば、行が次のようになります。

       <Row>
         <Parameter Name="Color">
           <Value>White</Value>
           <Value>Black</Value>
         </Parameter>
       </Row>

パラメーター Size(配列) が Row で指定されていないことに注意してください。 コードから Size を取得しようとすると、API 呼び出しから失敗したリターン コードが返されます。 これを使用して、既定の配列値を定義できます。

一方、次のように、Size に空のパラメーター タグを指定することで、空の配列を指定できます。

       <Row>
         <Parameter Name="Size"></Parameter>
         <Parameter Name="Color">
           <Value>White</Value>
           <Value>Black</Value>
         </Parameter>
       </Row>

この場合、 サイズを取得しようとすると成功しますが、配列サイズは 0 になります。

マネージド取得

マネージド取得は以前とほぼ同じです。値を適切な配列型のローカル変数に必ず取得する必要があります。 次のマネージド例を考えてみましょう。

1  Int32[] sizes = m_testContext.DataRow["Size"] as Int32[];
2  foreach (int size in sizes)
3  {
4          Verify.AreNotEqual(size, 0);
5          Console.WriteLine("Size is " + size.ToString());
6  }
7
8  String[] colors = m_testContext.DataRow["Color"] as String[];
9  foreach (String color in colors)
10 {
11         Console.WriteLine("Color is " + color);
12 }

ネイティブ取得と同様に、配列パラメーターが XML 行で指定されていない場合、パラメーターを取得しようとすると、System.DBNull 型のオブジェクトが返されます。 たとえば、行が次のようになります。

       <Row>
         <Parameter Name="Color">
           <Value>White</Value>
           <Value>Black</Value>
         </Parameter>
       </Row>

パラメーター Size(配列) が Row で指定されていないことに注意してください。 コードから Size を取得しようとすると、API 呼び出しは DBNull 型のオブジェクトを返します。 テーブルにそのような値がある場合は、最初にコンテキストからオブジェクトに取得し、オブジェクトの型を typeof(System.DBNull) またはそれを実行する型と比較した後、適切な手順を実行することができます。

一方、次のように、Size に空のパラメーター タグを指定することで、空の配列を指定できます。

       <Row>
         <Parameter Name="Size"></Parameter>
         <Parameter Name="Color">
           <Value>White</Value>
           <Value>Black</Value>
         </Parameter>
       </Row>

この場合、サイズ 取得しようとすると、System.Int32[] 型の空の配列が返されます。

実行

配列をサポートするデータ ドリブン テストの実行は、他のデータ ドリブン テストの実行と変わります。 唯一の違いは、配列データ パラメーターの場合に選択条件のセマティクスが変更され、"等しい" ではなく "含まれる" ことを意味する 点です。

これが何を意味するかを確認するには、Color 配列に White の値が含まれるすべてのデータ ドリブン テスト選択するとします。 このためには、次の操作を実行します。

TE.exe Examples\CSharp.DataDriven.Example.dll /select:"@Name='*Array* And @Data:Color='White'"
TE.exe Examples\CPP.DataDriven.Example.dll /select:"@Name='*Array* And @Data:Color='White'"

このコマンドは、上記のいずれの場合も、インデックス #0 と #3 を使用してデータ ドリブン テストを実行します。

たとえば、より複雑なクエリを作成できます。たとえば、の色 配列に白い が含 まれ、の色 配列に黒い 含まれているテストのみを選択できます。これは、インデックス 3 を持つデータドリブン テストのみを選択します。 演習として、このクエリを自分で記述して実行してみてください。