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.