配列サポート データ ドリブン テストの例
このセクションでは、例を使用してデータ ドリブン テストのいくつかの高度な機能について説明します。 まだ基本について説明している場合は、単純なデータ ドリブンの例のから始める必要があります。
参照される例:
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 を持つデータドリブン テストのみを選択します。 演習として、このクエリを自分で記述して実行してみてください。