Creación de pruebas en C++
En el ejemplo de código siguiente se muestra un archivo C++ nativo que contiene una sola clase de prueba con dos métodos de prueba.
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 }
La línea 1 incluye el único archivo de encabezado necesario para el marco, WexTestClass.h, que se encuentra en %\Archivos de programa (x86)\Windows Kits\10\Testing\Development\inc. Ese archivo de encabezado incluido también incluye el archivo Log.h para el registrador y el archivo Verify.h para definir los casos de comprobación. Estos archivos de encabezado se tratarán más adelante.
La línea 3 define una clase de prueba, SimpleTests. Las clases de prueba no necesitan heredar de ninguna clase especial. Además, su contenido no necesita ser público.
La línea 5 define esta clase como una clase de prueba.
Las líneas 8 y 9 declaran los dos métodos de prueba en la clase - FirstTest y SecondTest. Se definen en las líneas 12 a 20. La macro TEST_METHOD agrega la declaración de método necesaria a la clase. En este esquema de marcado, todas las pruebas deben tener el mismo prototipo. Deben devolver void y no deben tomar ningún parámetro.
Si desea definir las pruebas insertadas dentro de la declaración de clase, puede hacerlo siempre que incluya "WexTestClass.h" y INLINE_TEST_METHOD_MARKUP esté definido en el preprocesador.
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 };
Las líneas 10 y 15 ahora contienen las definiciones de los métodos de prueba.
Nota Si coloca la declaración de clase de prueba en un archivo de encabezado, es mejor incluir solo ese archivo de encabezado en un archivo cpp. Incluir una declaración de clase de prueba en varios archivos CPP da como resultado que los datos extraños se compilen en el archivo DLL de prueba.
Creación avanzada de pruebas en C++
En el ejemplo siguiente se usan métodos de instalación y limpieza y se declaran metadatos junto con las declaraciones de clase de prueba y método de prueba. Este ejemplo también contiene una sola clase (MetadataAndFixturesTests) con dos métodos de prueba.
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 }
La línea 4 comienza la declaración de metadatos globales, un conjunto de propiedades que se aplican a un binario de prueba para el que se compila este encabezado.
La línea 5 declara una propiedad con el nombre Feature y el valor TAEF. Puede haber más de una sola propiedad entre las macros BEGIN... y END... Existen declaraciones de propiedades similares en las líneas 20-24 (metadatos de nivel de clase), 45-47 (metadatos de nivel de método) y 52-54 (metadatos de nivel de prueba en una prueba definida en línea).
Las líneas 45 - 47 y 60 - 63 muestran estas macros de prueba para agregar metadatos también declaran los métodos de prueba. Las líneas 50 - 57 muestran que todavía puede tener metadatos incluso si desea declarar y definir la prueba en la misma ubicación.
La línea 8 declara una función de configuración de módulo: una función que se ejecuta antes de la creación de cualquiera de las clases de prueba del módulo.
La línea 13 declara una función de limpieza de módulos: una función que se ejecuta después de que finalicen todas las pruebas y los métodos de limpieza de clases y destructores. Hay métodos de instalación y limpieza similares para una clase en las líneas 24 a 32. Estos métodos se ejecutan después del constructor de clase y antes del destructor de clase respectivamente.
Las líneas 34 a 42 declaran funciones similares para los métodos de prueba. Los métodos de configuración y limpieza de pruebas se ejecutan antes y después de que se ejecute cada prueba.
Los métodos de configuración y limpieza de TAEF devuelven bool y no aceptan parámetros. El valor devuelto indica al marco si puede seguir ejecutando pruebas para una determinada unidad de prueba. Por ejemplo, si se produce un error en un método de instalación de clase y devuelve false, el marco no ejecutará los métodos de prueba de clase.