次の方法で共有


メタデータ オーバーライド データ ドリブン テストの例

このセクションでは、例を使用してデータ ドリブン テストの高度な機能について説明します。 まだ基本を学習中の方は、まず単純なデータ ドリブンの例に関するページを参照してください。

参照した例:

  • 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