Compartir a través de


Pruebas controladas por datos ligeras

Es probable que haya escenarios en los que una prueba completa basada en datos xml y basadas en tablas puede ser demasiado pesada para las necesidades del escenario de prueba. Las pruebas controladas por datos ligeras permiten una forma rápida y sencilla de obtener compatibilidad con pruebas controladas por datos cuando los datos de la prueba son sencillos y se pueden expresar fácilmente como metadatos. Vamos a usar un ejemplo y veamos cómo.

Los datos de la prueba controlada por datos de peso ligero se expresan como un conjunto de metadatos (en el nivel de prueba, clase o módulo). Para cada uno de los valores de este conjunto, los métodos de prueba en cuestión, junto con los métodos de instalación y desmontaje asociados se ejecutarán para cada valor del conjunto. Echemos un vistazo a cómo crear esto en código nativo:

1  #include "WexString.h"
2  #include "WexTestClass.h"
3
4  using namespace WEX::Common;
5  using namespace WEX::TestExecution;
6  using namespace WEX::Logging;

7  namespace WEX { namespace TestExecution { namespace Examples
8  {
9      class SimpleDataDrivenExample
10     {
11         TEST_CLASS(SimpleDataDrivenExample);
12         ...
13         BEGIN_TEST_METHOD(SetsOfDataTest)
14             TEST_METHOD_PROPERTY(L"Data:Color", L"{Purple, Maroon, Brown}")
15         END_TEST_METHOD()
16     };

Observe los valores de parámetro de TEST_METHOD_PROPERTY en la línea 14. El valor de metadatos de prueba comienza con "{" y termina con "}" que indica que se ha especificado una lista separada por comas o punto y coma de valores. TAEF volverá a ejecutar el método de prueba en cuestión, SetsOfDataTest() una vez para cada valor de este conjunto.

Observe también que el nombre de los metadatos comienza con "Data:". Esto implica que el conjunto de metadatos está especificando realmente variaciones para los parámetros de prueba controlada por datos y estaría disponible para el método de prueba real de forma muy similar a los parámetros de datos de una prueba basada en datos basada en tablas como la siguiente:

11     ...
12
13     void SimpleDataDrivenExample::SetsOfDataTest()
14     {
15         String color;
16         if (SUCCEEDED(TestData::TryGetValue(L"color", color)))
17         {
18             Log::Comment(L"Color retrieved was " + color);
19         }
20     }
21 } /* namespace Examples */ } /* namespace TestExecution */ } /* namespace WEX */

Al trabajar con código administrado, la especificación y recuperación del conjunto de datos es muy similar al ejemplo nativo. Observemos lo siguiente:

1  namespace WEX.Examples
2  {
3      using Microsoft.VisualStudio.TestTools.UnitTesting;
4      using System;
5      using System.Collections;
6      using System.Data;
7      using WEX.Logging.Interop;
8      using WEX.TestExecution;
9
10     [TestClass]
11     public class CSharpDataDrivenSimpleExample
12     {
13         ...
14         [TestMethod]
15         [TestProperty("Data:Color", "{Red, Green, Blue}")]
16         public void SetsOfMetadataTest()
17         {
18             Log.Comment("Color is " + m_testContext.DataRow["Color"]);
19         }
20
21         public TestContext TestContext
22         {
23             get { return m_testContext; }
24             set { m_testContext = value; }
25         }
26
27         private TestContext m_testContext;
28     }
29 }

Al igual que en el caso de las pruebas basadas en datos basadas en tablas, los conjuntos de datos especificados como metadatos permitirán la recuperación a través de TestContext.DataRow.Tenga en cuenta que para mantener el peso ligero de la prueba controlada por datos, el tipo de parámetro siempre será WEX::Common::String (en código nativo) y String(en código administrado)

Si se especifican varios valores de datos, se obtendrá un producto cartesiano de todos los valores posibles y se invocará el método de prueba para cada combinación.

Además, es posible tener algunos conjuntos de metadatos (como conjuntos de metadatos threadingModel) así como conjuntos de datos especificados para el mismo método de prueba. En tal caso, la TAEF generará una expansión combinatoria de todos los conjuntos de metadatos y conjuntos de datos y se invocarán los métodos de prueba en cuestión con cada combinación.

Casos especiales: prueba controlada por datos con un conjunto de metadatos o datos

Podría tener un método de prueba dependiente de una prueba basada en tabla basada en datos, así como especificar un conjunto de datos o metadatos para él. Por ejemplo, un método de prueba podría tener parámetros "size" y "color" especificados en la prueba basada en datos basadas en tablas y desea que todas las filas se ejecuten una vez con el parámetro "transparency" establecido en true y, a continuación, establecido en false. En tal caso, se podría especificar "transparencia" como un conjunto "{true, false}" para la prueba controlada por datos. Es importante tener en cuenta que, en caso de conflictos de parámetros en un conjunto de metadatos, la fila basada en datos basada en datos, el tipo de parámetro de nivel de fila y el valor invalidarán el valor establecido de metadatos.

Ejecución de pruebas con conjuntos de datos o metadatos

La ejecución de pruebas que contienen conjuntos de datos es bastante intuitiva. Echemos un vistazo a la salida /listproperties para nuestras pruebas de ejemplo:

1   te Examples\CPP.DataDriven.Example.dll /name:*SetsOfDataTest* /listproperties
2
3   Test Authoring and Execution Framework v2.9.3k for x64
4
5           f:\ Examples\CPP.SimpleDataDriven.Example.dll
6               WEX::TestExecution::Examples::SimpleDataDrivenExample<
7                   WEX::TestExecution::Examples::SimpleDataDrivenExample::SetsOfDataTest#metadataSet0
8                           Property[Data:Color] = {Purple, Maroon, Brown}
9
10                          Data[Color] = Purple
11
12                  WEX::TestExecution::Examples::SimpleDataDrivenExample::SetsOfDataTest#metadataSet1
13                          Property[Data:Color] = {Purple, Maroon, Brown}
14
15                          Data[Color] = Maroon
16
17                  WEX::TestExecution::Examples::SimpleDataDrivenExample::SetsOfDataTest#metadataSet2
18                          Property[Data:Color] = {Purple, Maroon, Brown}
19
20                          Data[Color] = Brown

Observe las líneas 7, 12 y 17 del ejemplo anterior. Un índice de conjunto de metadatos se anexa a cada invocación del método de prueba con el valor del conjunto de datos. Este índice tiene el formato :

<namespace qualified test method name>#metadataSet<metadataIndex>

Las líneas 8, 13 y 18 muestran el conjunto de metadatos especificado para esta compatibilidad con pruebas controladas por datos de peso ligero. En este caso, el conjunto consta de colores púrpura, maron y marrón. Las líneas 10, 15 y 20 muestran el valor real de este conjunto que está activo para la invocación actual de la prueba. En el caso de SetsOfMetadataTest#metadataSet1, la segunda invocación de este método, el valor del parámetro activo del conjunto es "Maroon".

Puede seleccionar en el valor de datos o el nombre del mismo modo que en pruebas basadas en datos basadas en tablas. Por ejemplo, puede seleccionar SetsOfDataTest#metadataSet1 mediante una consulta de selección como /select:@Data:Color='Maroon' o /name:*#metadataSet1

Para obtener una referencia rápida, la salida de /listproperties del ejemplo de prueba de administración se muestra a continuación:

te Examples\CSharp.DataDriven.Example.dll /name:*SetsOfMetadataTest* /listproperties

Test Authoring and Execution Framework v2.9.3k for x64

        f:\ Examples\CSharp.DataDrivenSimple.Example.dll
            WEX.Examples.CSharpDataDrivenSimpleExample
                WEX.Examples.CSharpDataDrivenSimpleExample.NonDataDrivenTest
                WEX.Examples.CSharpDataDrivenSimpleExample.SetsOfMetadataTest#metadataSet0
                        Property[Data:Color] = {Red, Green, Blue}

                        Data[Color] = Red

                WEX.Examples.CSharpDataDrivenSimpleExample.SetsOfMetadataTest#metadataSet1
                        Property[Data:Color] = {Red, Green, Blue}

                        Data[Color] = Green

                WEX.Examples.CSharpDataDrivenSimpleExample.SetsOfMetadataTest#metadataSet2
                        Property[Data:Color] = {Red, Green, Blue}

                        Data[Color] = Blue