Condividi tramite


Esempio di test basato sui metadati

In questa sezione vengono illustrate alcune funzionalità avanzate dei test basati sui dati, ad esempio. Se si coprono ancora le nozioni di base, è possibile iniziare con un esempio basato su dati semplice.

Esempi di riferimento:

  • MetadataOverridingDataDrivenExample

  • DataDrivenMetadataOverridingExample

Se si confrontano gli esempi illustrati in questa sezione a quelli illustrati nella pagina Esempio basato su dati semplici , si noterà che l'unica differenza è che i metadati e le proprietà a vari livelli del test sono stati aggiunti. Si esamini prima di tutto come viene creato un test di base.

Nell'esempio nativo osservare le righe 5 e 10 nell'esempio di codice seguente:

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  }

Quindi tutti i test definiti nella classe "MetadataOverridingDataDrivenExample" hanno la priorità 2. Tenere presente che i test possono eseguire l'override di tutti i metadati specificati a un livello superiore (classe o modulo). In questo caso, il metodo DataDrivenTest mantiene ancora la priorità di 2 e ha il relativo "Proprietario" definito come "WEX". Ora, se si tratta di un test non basato sui dati, è possibile scegliere in base a uno di questi elementi, /select:"@Priority=2" o /select:"@Owner='WEX'" ed eseguire il metodo di test in esso. Tuttavia , con i test basati sui dati, è possibile eseguire ulteriormente l'override della proprietà applicabile a livello di metodo di test specificando i metadati a livello di "Row".

Esaminiamo il file XML per comprendere come.

    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>

Nelle prime 3 righe l'esempio esegue l'override di alcuni metadati specificando in modo esplicito i metadati per il set specifico di valori di dati. L'ultimo set di dati ha tuttavia gli stessi metadati del metodo che lo contiene: Priority=2 e Owner=WEX.

Esaminiamo il codice gestito prima di esaminare la selezione e l'esecuzione di questi test.

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     }
...

Si simulano anche le proprietà nell'esempio nativo.

Ora, è possibile comprendere l'override di un po' meglio:

TE.exe Examples\CSharp.DataDriven.Example.dll /select:"@Name='*overriding*' and @Priority=1"

eseguirà

  • WEX. Esempi.DataDrivenMetadataOverridingExample.DataDrivenTest#0
  • WEX. Esempi.DataDrivenMetadataOverridingExample.DataDrivenTest#2
TE.exe Examples\CPP.DataDriven.Example.dll /select:"@Name='*overriding*' and @Priority=1"

eseguirà:

  • WEX::TestExecution::Examples::MetadataOverridingDataDrivenExample::D ataDrivenTest#0
  • WEX::TestExecution::Examples::MetadataOverridingDataDrivenExample::D ataDrivenTest#2

Esercizio per il lettore

Come esercizio, provare ad aggiungere nuovi valori di metadati. Solo variando i criteri di selezione negli esempi precedenti,

/select:"@Name='*overriding*' and @Owner='WEX'"

eseguirà test basati sui dati con indice #0 e #3 in esempi gestiti e nativi

 /select:"@Name='*overriding*' and @Priority=2"

eseguirà test basati sui dati con indice #1 e #3 ed eseguirà anche nonDataDrivenTest nell'esempio gestito

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