Partilhar via


Testes de criação em C++

O exemplo de código a seguir mostra um arquivo C++ nativo que contém uma única classe de teste com dois métodos de teste.

1   #include "WexTestClass.h"
2
3   class SimpleTests   {
4      // Declare this class as a TestClass, and supply metadata if necessary.
5      TEST_CLASS(SimpleTests);
6
7      // Declare the tests within this class.
8      TEST_METHOD(FirstTest);
9      TEST_METHOD(SecondTest);
10  };
11
12  void SimpleTests::FirstTest()
13  {
14      VERIFY_ARE_EQUAL(1, 1);
15  }
16
17  void SimpleTests::SecondTest()
18  {
19      VERIFY_IS_TRUE(true);
20  }

A linha 1 inclui o único arquivo de cabeçalho necessário para a estrutura, WexTestClass.h, encontrado em %\Program Files (x86)\Windows Kits\10\Testing\Development\inc. Esse arquivo de cabeçalho incluído também inclui o arquivo Log.h para o Logger e o arquivo Verify.h para definir os casos de verificação. Esses arquivos de cabeçalho serão abordados mais tarde.

A linha 3 define uma classe de teste, SimpleTests. As classes de teste não precisam herdar nenhuma classe especial. Além disso, seu conteúdo não precisa ser público.

A linha 5 define essa classe como uma classe de teste.

As linhas 8 e 9 declaram os dois métodos de teste na classe: FirstTest e SecondTest. Eles são definidos nas linhas 12 a 20. A macro TEST_METHOD adiciona a declaração de método necessária à classe. Nesse esquema de marcação, todos os testes devem ter o mesmo protótipo. Eles devem retornar nulos e não devem ter parâmetros.

Se você deseja definir os testes incorporados na declaração de classe, pode fazer isso desde que inclua "WexTestClass.h" enquanto INLINE_TEST_METHOD_MARKUP é definido no pré-processador.

1   #define INLINE_TEST_METHOD_MARKUP
2   #include "WexTestClass.h"
3
4   class InlineTests
5   {
6       TEST_CLASS(InlineTests);
7 
8       TEST_METHOD(FirstTest)
9       {
10          VERIFY_ARE_EQUAL(1, 1);
11      }
12
13      TEST_METHOD(SecondTest)
14      {
15          VERIFY_IS_TRUE(true);
16      }
17  };

As linhas 10 e 15 agora contêm as definições dos métodos de teste.

Observação Se você colocar sua declaração de classe de teste em um arquivo de cabeçalho, é melhor que seja apenas em um arquivo cpp. A inclusão de uma declaração de classe de teste em vários arquivos CPP gera a compilação de dados estranhos na DLL de teste.

Testes avançados de criação em C++

O exemplo a seguir usa métodos de instalação e de limpeza e declara metadados junto com a classe de teste e as declarações de método de teste. Este exemplo também contém uma única classe (MetadataAndFixturesTests) com dois métodos de teste.

 1  #define INLINE_TEST_METHOD_MARKUP
 2  #include "WexTestClass.h"
 3
 4  BEGIN_MODULE()
 5      MODULE_PROPERTY(L"Feature", L"TAEF")
 6  END_MODULE()
 7
 8  MODULE_SETUP(ModuleSetup)
 9  {
10      return true;
11  }
12
13  MODULE_CLEANUP(ModuleCleanup)
14  {
15      return true;
16  }
17
18  class MetadataAndFixturesTests
19  {
20      BEGIN_TEST_CLASS(MetadataAndFixturesTests)
21          TEST_CLASS_PROPERTY(L"Component", L"Verify")
22      END_TEST_CLASS()
23
24      TEST_CLASS_SETUP(ClassSetup)
25      {
26          return true;
27      }
28
29      TEST_CLASS_CLEANUP(ClassCleanup)
30      {
31          return true;
32      }
33
34      TEST_METHOD_SETUP(TestSetup)
35      {
36          return true;
37      }
38
39      TEST_METHOD_CLEANUP(TestCleanup)
40      {
41          return true;
42      }
43
44      // If you use this syntax, you will have to define the test outside of the test class.
45      BEGIN_TEST_METHOD(FirstTest)
46          TEST_METHOD_PROPERTY(L"Owner", L"Contoso")
47      END_TEST_METHOD()
48
49      // You can still have metadata even if you define your test inside the test class.
50      TEST_METHOD(SecondTest)
51      {
52          BEGIN_TEST_METHOD_PROPERTIES()
53              TEST_METHOD_PROPERTY(L"Owner", L"Contoso")
54          END_TEST_METHOD_PROPERTIES()
55
56          VERIFY_IS_TRUE(true);
57      }
58  };
59
60  void MetadataAndFixturesTests::FirstTest()
61  {
62      VERIFY_ARE_EQUAL(1, 1);
63  }

A linha 4 inicia a declaração de metadados globais, um conjunto de propriedades que se aplicam a um binário de teste para o qual esse cabeçalho é compilado.

A linha 5 declara uma propriedade com o nome Feature e o valor TAEF. Pode haver mais de uma única propriedade entre as macros BEGIN... e END.... Declarações de propriedade semelhantes existem nas linhas 20 a 24 (metadados de nível de classe), 45 a 47 (metadados de nível de método) e 52a 54 (metadados de nível de teste em um teste definido incorporado).

As linhas 45 a 47 e 60 a 63 demonstram que essas macros de teste para adicionar metadados também declaram os métodos de teste. As linhas 50 a 57 demonstram que você ainda pode ter metadados, mesmo que queira declarar e definir o teste no mesmo local.

A linha 8 declara uma função de configuração do módulo: uma função que é executada antes da criação de qualquer uma das classes de teste do módulo.

A linha 13 declara uma função de limpeza de módulo: uma função executada após a conclusão de todos os métodos de limpeza de teste e de classe e de destruidores. Há métodos de configuração e de limpeza semelhantes para uma classe nas linhas 24 a 32. Esses métodos são executados após o construtor de classe e antes do destruidor de classe, respectivamente.

As linhas 34 a 42 declaram funções semelhantes para os métodos de teste. Os métodos de configuração e de limpeza de teste são executados antes e depois da execução de cada teste.

Os métodos de configuração e de limpeza do TAEF retornam bool e não aceitam parâmetros. O valor de retorno sinaliza para a estrutura se ela pode continuar a executar testes para determinada unidade de teste. Por exemplo, se um método de configuração de classe falhar e retornar false, a estrutura não executará os métodos de teste de classe.