Partilhar via


Exemplo de teste baseado em dados de substituição de metadados

Esta seção aborda alguns recursos avançados de teste controlado por dados por meio de exemplo. Se você ainda estiver cobrindo as noções básicas, talvez queira começar com um exemplo simples controlado por dados.

Exemplos referenciados:

  • MetadataOverridingDataDrivenExample

  • DataDrivenMetadataOverridingExample

Se você comparar os exemplos abordados nesta seção com os abordados na página Exemplo Orientado por Dados Simples , observará que a única diferença é que metadados e propriedades em vários níveis no teste foram adicionados. Vamos primeiro examinar como um teste básico é criado.

No exemplo nativo, observe as linhas 5 e 10 no exemplo de código abaixo:

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  }

Portanto, todos os testes definidos na classe "MetadataOverridingDataDrivenExample" têm prioridade de 2. Lembre-se de que os testes podem substituir todos os metadados especificados em um nível acima deles (classe ou módulo). Nesse caso, o método DataDrivenTest ainda mantém a prioridade 2 e tem seu "Proprietário" definido como "WEX". Agora, se esse fosse um teste não controlado por dados, você poderia escolher com base em qualquer um deles, /select:"@Priority=2" ou /select:"@Owner='WEX'", e executar o método de teste nele. Porém , com os testes controlados por dados, você pode substituir ainda mais a propriedade aplicável no nível do método de teste especificando metadados no nível "Linha".

Vamos examinar o arquivo XML para entender como.

    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>

Nas três primeiras linhas, o exemplo substitui alguns metadados especificando explicitamente os metadados para o conjunto específico de valores de dados. No entanto, o último conjunto de dados tem os mesmos metadados que o método que o contém: Priority=2 e Owner=WEX.

Vamos dar uma olhada no código gerenciado antes de examinar a seleção e a execução desses testes.

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

Você também está imitando as propriedades no exemplo nativo exatamente aqui.

Agora, vamos entender a substituição um pouco melhor:

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

será executado

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

executará:

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

Exercício para o leitor

Como exercício, tente adicionar novos valores de metadados. Variando apenas os critérios de seleção nos exemplos acima,

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

executará testes controlados por dados com índice nº 0 e nº 3 em exemplos gerenciados e nativos

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

executará testes controlados por dados com o índice nº 1 e #3 e também executará NonDataDrivenTest no exemplo gerenciado

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