Delen via


Lichtgewicht gegevensgestuurd testen

Er zijn waarschijnlijk scenario's waarin een volledig op XML DataSource en Tabel gebaseerd gegevensgestuurd testen te zwaar kan zijn voor uw testscenariobehoeften. Lichtgewicht gegevensgestuurde tests bieden een snelle en eenvoudige manier om ondersteuning voor gegevensgestuurde tests te krijgen wanneer de gegevens voor uw test eenvoudig zijn en eenvoudig kunnen worden uitgedrukt als metagegevens. Laten we een voorbeeld gebruiken en zien hoe.

De gegevens voor de lichtgewicht gegevensgestuurde test worden uitgedrukt als een set metagegevens (op test-, klasse- of moduleniveau). Voor elk van de waarden in deze set worden de testmethoden in kwestie, samen met de bijbehorende installatie- en teardown-methoden uitgevoerd voor elke waarde in de set. Laten we eens kijken hoe u dit ontwerpt in systeemeigen code:

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

Let op de parameterwaarden voor TEST_METHOD_PROPERTY in regel 14. De waarde van de testmetagegevens begint met een {en eindigt met een '}' die aangeeft dat er een door komma's of puntkomma's gescheiden lijst met waarden is opgegeven. TAEF voert de testmethode in kwestie opnieuw uit, SetsOfDataTest() eenmaal voor elke waarde in deze set.

U ziet ook dat de naam van de metagegevens begint met een 'Gegevens:'. Dit impliceert dat de metagegevensset echt variaties opgeeft voor de gegevensgestuurde testparameters en beschikbaar is voor de daadwerkelijke testmethode, net zoals gegevensparameters van een op tabellen gebaseerde gegevensgestuurde test:

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 */

Tijdens het werken met beheerde code is de specificatie en het ophalen van gegevenssets vergelijkbaar met het systeemeigen voorbeeld. Laten we eens kijken:

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 }

Net als in het geval van op tabellen gebaseerde gegevensgestuurde tests kunnen sets met gegevens die zijn opgegeven als metagegevens, ophalen via TestContext.DataRow mogelijk. Houd er rekening mee dat om het lichtgewicht van de gegevensgestuurde test te behouden, het parametertype altijd WEX::Common::String (in systeemeigen code) en String(in beheerde code)

Als er meerdere gegevenswaarden zijn opgegeven, wordt een cartesisch product van alle mogelijke waarden verkregen en wordt de testmethode voor elke combinatie aangeroepen.

Het is verder mogelijk om enkele metagegevenssets (zoals ThreadingModel-metagegevenssets) en gegevenssets te laten opgeven die zijn opgegeven voor dezelfde testmethode. In dat geval wordt een combinatoriële uitbreiding van alle metagegevenssets en gegevenssets geproduceerd door TAEF en worden de betrokken testmethoden met elke combinatie aangeroepen.

Speciale gevallen: gegevensgestuurde test met een reeks metagegevens of gegevens

U kunt een testmethode hebben die afhankelijk is van een gegevensgestuurde test op basis van tabellen en een set gegevens of metagegevens opgeven. Een testmethode kan bijvoorbeeld parameters 'grootte' en 'kleur' bevatten die zijn opgegeven in de gegevensgestuurde test op basis van de tabel en alle rijen moeten eenmaal worden uitgevoerd met de parameter 'transparantie' ingesteld op waar en vervolgens ingesteld op onwaar. In dat geval kan 'transparantie' worden opgegeven als een set {true, false} voor de gegevensgestuurde test. Het is belangrijk te weten dat in het geval van conflicten met parameters in een tabel met metagegevenssets op basis van gegevensgestuurde rij, het parametertype en de waarde op rijniveau de waarde van de metagegevensset overschrijft.

Tests uitvoeren met sets gegevens/metagegevens

Het uitvoeren van tests met gegevenssets is vrij intuïtief. Laten we eens kijken naar de uitvoer van /listproperties voor onze voorbeeldtests:

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

Let op regels 7, 12 en 17 in het bovenstaande voorbeeld. Een index voor metagegevenssets wordt toegevoegd aan elke aanroep van de testmethode met de waarde in de gegevensset. Deze index heeft de volgende notatie:

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

In regel 8, 13 en 18 ziet u de metagegevensset die is opgegeven voor deze lichtgewicht gegevensgestuurde testondersteuning. In dit geval bestaat de set uit kleuren paars, maroen en bruin. In regel 10, 15 en 20 wordt de werkelijke waarde uit deze set weergegeven die actief is voor de huidige aanroep van de test. In het geval van SetsOfMetadataTest#metadataSet1, de tweede aanroep van deze methode, is de actieve parameterwaarde uit de set 'Maroon'

U kunt de gegevenswaarde of naam op dezelfde wijze selecteren als in gegevensgestuurde tests op basis van tabellen. U kunt bijvoorbeeld SetsOfDataTest#metadataSet1 selecteren door een selectiequery zoals /select:@Data:Color='Maroon' of /name:*#metadataSet1

Voor snelzoekgids ziet u uitvoer van /listproperties uit het voorbeeld van de beheerde test hieronder:

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