メタデータ オーバーライド データ ドリブン テストの例
このセクションでは、例を使用してデータ ドリブン テストの高度な機能について説明します。 まだ基本を学習中の方は、まず単純なデータ ドリブンの例に関するページを参照してください。
参照した例:
MetadataOverridingDataDrivenExample
DataDrivenMetadataOverridingExample
このセクションで取り上げる例を、単純なデータ ドリブンの例のページで説明されている例と比較すると、テストのさまざまなレベルでメタデータとプロパティが追加されている点だけが唯一の違いであることに気付くでしょう。 まず、基本的なテストの作成方法を見てみましょう。
ネイティブの例では、次のコード例の 5 行目と 10 行目を確認します。
1 class MetadataOverridingDataDrivenExample
2 {
3 BEGIN_TEST_CLASS(MetadataOverridingDataDrivenExample)
4 ...
5 TEST_CLASS_PROPERTY(L"Priority", L"2")
6 END_TEST_CLASS()
7
8 BEGIN_TEST_METHOD(DataDrivenTest)
9 ...
10 TEST_METHOD_PROPERTY(L"Owner", L"wex")
11 END_TEST_METHOD()
12 }
つまり、"MetadataOverridingDataDrivenExample" クラスで定義されているすべてのテストの優先度は 2 です。 テストでは、その上のレベル (クラスまたはモジュール) で指定されたメタデータをオーバーライドできることに注意してください。 この場合、DataDrivenTest メソッドは引き続き優先度 2 を維持し、"Owner" は "WEX" と定義されます。 これが非データ ドリブン テストである場合は、/select:"@Priority=2" または /select:"@Owner='WEX'" のいずれかに基づいて選択し、その中でテスト メソッドを実行できます。 しかし、データ ドリブン テストでは、"行" レベルでメタデータを指定することにより、テスト メソッド レベルで適用可能なプロパティをさらにオーバーライドすることができます。
その方法を理解するために、XML ファイルを見てみましょう。
1 <?xml version="1.0"?>
2 <Data>
3 <Table Id="MetadataTable">
4 <ParameterTypes>
5 <ParameterType Name="Size">int</ParameterType>
6 </ParameterTypes>
7 <Row Priority="1">
8 <Parameter Name="Size">4</Parameter>
9 <Parameter Name="Color">White</Parameter>
10 </Row>
11 <Row Owner="C2">
12 <Parameter Name="Size">10</Parameter>
13 <Parameter Name="Color">Black</Parameter>
14 </Row>
15 <Row Priority="1" Owner="C3">
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>
例の最初の 3 行では、特定のデータ値セットのメタデータを明示的に指定することで、一部のメタデータをオーバーライドします。 ただし、データの最後のセットには、そのセットを含むメソッドと同じメタデータ (Priority=2 および Owner=WEX) があります。
これらのテストの選択条件と実行を確認する前に、マネージド コードを見てみましょう。
1 [TestClass]
2 public class DataDrivenMetadataOverridingExample
3 {
4 [ClassInitialize]
5 [Priority(2)]
6 public static void MyClassInitialize(Object testContext)
7 {
8 }
9
9 [TestMethod]
10 ...
11 [TestProperty("Owner", "WEX")]
12 public void DataDrivenTest()
13 {
14 ...
15 }
...
ここでは、ネイティブの例のプロパティも正確に模倣しています。
さて、オーバーライドについてもう少し理解しましょう。
TE.exe Examples\CSharp.DataDriven.Example.dll /select:"@Name='*overriding*' and @Priority=1"
これにより、以下が実行されます。
- WEX.Examples.DataDrivenMetadataOverridingExample.DataDrivenTest#0
- WEX.Examples.DataDrivenMetadataOverridingExample.DataDrivenTest#2
TE.exe Examples\CPP.DataDriven.Example.dll /select:"@Name='*overriding*' and @Priority=1"
これにより、以下が実行されます。
- WEX::TestExecution::Examples::MetadataOverridingDataDrivenExample::DataDrivenTest#0
- WEX::TestExecution::Examples::MetadataOverridingDataDrivenExample::DataDrivenTest#2
読者向けの演習
演習として、新しいメタデータ値を追加してみてください。 上記の例の選択条件のみを変更します。
/select:"@Name='*overriding*' and @Owner='WEX'"
これにより、マネージドとネイティブの両方の例で、インデックス #0 と #3 を使用してデータ ドリブン テストが実行されます
/select:"@Name='*overriding*' and @Priority=2"
これにより、インデックス #1 と #3 を使用してデータ ドリブン テストを実行し、マネージドの例では NonDataDrivenTest も実行します
TE.exe Examples\CPP.DataDriven.Example.dll Examples\CSharp.DataDriven.Example.dll /name:*overriding* /listproperties
F:\ Examples\CPP.DataDriven.Example.dll
WEX::TestExecution::Examples::MetadataOverridingDataDrivenExample
Property[Priority] = 2
WEX::TestExecution::Examples::MetadataOverridingDataDrivenExample::DataDrivenTest#0
Property[Owner] = WEX
Property[Priority] = 1
Property[DataSource] = Table:MetadataOverridingDataDrivenExample.xml#MetadataTable
Data[Color] = White
Data[Size] = 4
WEX::TestExecution::Examples::MetadataOverridingDataDrivenExample::DataDrivenTest#1
Property[Owner] = C2
Property[DataSource] = Table:MetadataOverridingDataDrivenExample.xml#MetadataTable
Data[Color] = Black
Data[Size] = 10
WEX::TestExecution::Examples::MetadataOverridingDataDrivenExample::DataDrivenTest#2
Property[Owner] = C3
Property[Priority] = 1
Property[DataSource] = Table:MetadataOverridingDataDrivenExample.xml#MetadataTable
Data[Color] = Orange
Data[Size] = 9
WEX::TestExecution::Examples::MetadataOverridingDataDrivenExample::DataDrivenTest#3
Property[Owner] = WEX
Property[DataSource] = Table:MetadataOverridingDataDrivenExample.xml#MetadataTable
Data[Color] = Blue
Data[Size] = 9
F:\ Examples\CSharp.DataDriven.Example.dll
WEX.Examples.DataDrivenMetadataOverridingExample
Setup: MyClassInitialize
Property[Priority] = 2
WEX.Examples.DataDrivenMetadataOverridingExample.DataDrivenTest#0
Property[DataSource] = Table:CSharpDataDrivenMetadataOverridingExample.xml#MetadataTable
Property[Owner] = WEX
Property[Priority] = 1
Data[Color] = White
Data[Size] = 4
WEX.Examples.DataDrivenMetadataOverridingExample.DataDrivenTest#1
Property[DataSource] = Table:CSharpDataDrivenMetadataOverridingExample.xml#MetadataTable
Property[Owner] = C2
Data[Color] = Black
Data[Size] = 10
WEX.Examples.DataDrivenMetadataOverridingExample.DataDrivenTest#2
Property[DataSource] = Table:CSharpDataDrivenMetadataOverridingExample.xml#MetadataTable
Property[Owner] = C3
Property[Priority] = 1
Data[Color] = Orange
Data[Size] = 9
WEX.Examples.DataDrivenMetadataOverridingExample.DataDrivenTest#3
Property[DataSource] = Table:CSharpDataDrivenMetadataOverridingExample.xml#MetadataTable
Property[Owner] = WEX
Data[Color] = Blue
Data[Size] = 9
WEX.Examples.DataDrivenMetadataOverridingExample.NonDataDrivenTest