Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questa sezione descrive diversi esempi di test basati sui dati e illustra funzionalità specifiche in ogni esempio.
Il primo esempio è un test basato sui dati di base, denominato SimpleDataDrivenExample.
Nell'esempio gestito è presente un file XML simile al seguente:
1 <?xml version="1.0"?>
2 <Data>
3 <Table Id="Table1">
4 <ParameterTypes>
5 <ParameterType Name="Size">Int32</ParameterType>
6 <ParameterType Name="Color">String</ParameterType>
7 </ParameterTypes>
8 <Row>
9 <Parameter Name="Size">4</Parameter>
10 <Parameter Name="Color">White</Parameter>
11 </Row>
12 <Row>
13 <Parameter Name="Size">10</Parameter>
14 <Parameter Name="Color">Black</Parameter>
15 </Row>
16 <Row>
17 <Parameter Name="Size">9</Parameter>
18 <Parameter Name="Color">Orange</Parameter>
19 </Row>
20 <Row>
21 <Parameter Name="Size">9</Parameter>
22 <Parameter Name="Color">Blue</Parameter>
23 </Row>
24 </Table>
25 </Data>
Questo file XML definisce i parametri di dati da utilizzare per il test basato sui dati. Il nodo XML principale è il <tag Data> , che può contenere uno o più <tag table> definiti al suo interno. Ogni tabella deve essere associata a un attributo "ID" univoco. Le funzioni di test usano il valore id tabella per identificare la tabella specifica che useranno nel file XML.
All'interno del <tag Table> è disponibile una sezione ParameterTypes> facoltativa<. Qui è possibile specificare in modo esplicito il tipo di dati per un determinato parametro usando <i tag ParameterTypes> . Nell'esempio precedente si specifica in modo esplicito che il parametro "Size" è di tipo "Int32" e Parameter "Color" è una stringa. Per riepilogare: la sezione ParameterTypes è facoltativa. Per impostazione predefinita, se le informazioni sul tipo di parametro non vengono fornite, verranno salvate come stringa.
Se si confrontano gli esempi gestiti e nativi, si noterà che l'unica differenza tra i due è il <blocco ParameterTypes> . Il file XML nativo specifica che Size deve essere del tipo integer nativo "int" e usa il tipo predefinito WEX::Common::String per essere il tipo per Color senza specificarlo. Per praticità, nell'esempio seguente viene illustrato il file XML dell'esempio nativo.
1 <?xml version="1.0"?>
2 <Data>
3 <Table Id="SimpleTable">
4 <ParameterTypes>
5 <ParameterType Name="Size">int</ParameterType>
6 </ParameterTypes>
7 <Row>
8 <Parameter Name="Size">4</Parameter>
9 <Parameter Name="Color">White</Parameter>
10 </Row>
11 <Row>
12 <Parameter Name="Size">10</Parameter>
13 <Parameter Name="Color">Black</Parameter>
14 </Row>
15 <Row>
16 <Parameter Name="Size">9</Parameter>
17 <Parameter Name="Color">Orange</Parameter>
18 </Row>
19 <Row>
20 <Parameter Name="Size">9</Parameter>
21 <Parameter Name="Color">Blue</Parameter>
22 </Row>
23 </Table>
24 </Data>
I tipi di parametro supportati in Codice nativo e gestito sono elencati in Tipi di parametro nelle origini dati della tabella.
Se viene specificato un altro tipo di dati, il test genererà un avviso e considererà string.
Continuando con i file XML, dopo il <blocco ParameterTypes in entrambi i> file XML, è disponibile un set identico di <righe>, che corrispondono a un set di dati sia negli esempi gestiti che nativi. In questo caso specifico sono presenti 4 set di dati definiti tramite 4 <blocchi row> , ognuno dei quali specifica i valori dei parametri usando i <tag Parameter> .
Che illustra le nozioni di base essenziali delle varie parti del file di origine dati. Si vedrà ora come recuperare i valori specificati nel file XML precedente.
Creazione di un test basato sui dati
Ora che i dati vengono specificati, è necessario un modo per associare il codice o il metodo di test che utilizzerà i dati con questi dati nel file XML. A tale scopo, sia negli esempi gestiti che nativi, specificare i metadati "DataSource". I metadati di DataSource hanno tre parti al suo interno:
- 'Table:': identifica l'origine dati come tabella XML.
- 'DataDrivenTests.xml': si tratta del file che contiene la tabella XML.
- '#Table2': dopo il delimeter '#', il valore 'Table2' identifica la tabella specifica all'interno del documento XML da usare. Una singola origine dati tabella XML può contenere più tabelle. TAEF esaminerà il file XML per un elemento Table con un attributo 'Id' che corrisponde al valore specificato.
Ancora una volta, esaminiamo rapidamente il codice che copre gli aspetti precedenti.
Codice nativo
1 class SimpleDataDrivenExample
2 {
3 BEGIN_TEST_CLASS(SimpleDataDrivenExample)
4 TEST_CLASS_PROPERTY(L"Description", L"Simple example in table-based data-driven tests")
5 END_TEST_CLASS()
6
7 TEST_METHOD_CLEANUP(TestCleanup);
8 TEST_METHOD_SETUP(TestSetup);
9
10 BEGIN_TEST_METHOD(DataDrivenTest)
11 TEST_METHOD_PROPERTY(L"DataSource", L"Table:SimpleDataDrivenExample.xml#SimpleTable")
11 END_TEST_METHOD()
12 ...
Codice gestito
1 [TestMethod]
2 [DataSource("Table:CSharpDataDrivenSimpleExample.xml#SimpleTable")]
3 public void DataDrivenTest()
4 {
5 ...
6 }
"DataSource" è una proprietà nota in Microsoft.VisualStudio.TestTools.UnitTesting.
Oltre a quanto sopra riportato, sono necessari alcuni passaggi aggiuntivi per i test basati sui dati nel codice gestito. È anche necessario definire una proprietà TestContext privata. Per altre informazioni, vedere Classe TestContext. Si definiscono anche i valutatori pubblici per questa proprietà. Internamente TAEF imposta questa proprietà TestContext in modo da poter accedere ai dati tramite di esso. Esaminiamo rapidamente questa parte di codice:
1 public TestContext TestContext
2 {
3 get;
4 set;
5 }
Recupero dei dati nel metodo Test
Le API di recupero sono diverse nel codice gestito e nativo. Si inizierà a comprendere l'API di recupero nativa:
1 void SimpleDataDrivenExample::DataDrivenTest()
2 {
3 int size;
4 if (SUCCEEDED(TestData::TryGetValue(L"size", size)))
5 {
6 VERIFY_ARE_NOT_EQUAL(size, 0);
7 Log::Comment(String().Format(L"Size retrieved was %d", size));
8 }
9
10 String color;
11 if (SUCCEEDED(TestData::TryGetValue(L"color", color)))
12 {
13 Log::Comment(L"Size retrieved was " + color);
14 }
15
16 unsigned int index;
17 if (SUCCEEDED(TestData::TryGetValue(L"index", index)))
18 {
19 Log::Comment(String().Format(L"At index %d", index));
20 }
21 }
Prestare particolare attenzione alle righe 4, 11 e 17. Prima di ognuna di queste righe, definire una variabile locale per salvare i dati che verranno recuperati. È importante ottenere il tipo proprio qui. Poiché "Size" è stato definito come tipo "int" nel file XML, è necessario definire una variabile locale di tipo int per recuperarla. L'API di recupero accetta il nome del parametro da recuperare come valore String come primo parametro. Il secondo parametro è la variabile locale passata per riferimento e impostata dal codice TAEF.
Questa API di recupero viene definita in TestData.h e inclusa nell'intestazione WexTestClass.h inclusa in tutti i test TAEF.
Per recuperare i dati nel codice gestito, utilizzare la proprietà TestContext definita. Esaminare il codice seguente (o ad esempio):
1 public void DataDrivenTest()
2 {
3 int size = (int)m_testContext.DataRow["Size"];
4 Verify.AreNotEqual(size, 0);
5 Log.Comment("Size is " + size.ToString());
6
7 Log.Comment("Color is " + m_testContext.DataRow["Color"]);
8 UInt32 index = (UInt32)m_testContext.DataRow["Index"];
9 Log.Comment("At index " + index.ToString());
10 }
Se si ha familiarità con VSTS, si noterà che l'esempio precedente è simile. Usare DataRow e specificare il nome della colonna come nome del parametro che si sta tentando di recuperare.
Se si esamina l'esempio, è presente anche un test non basato sui dati nella stessa classe. In altre parole, è possibile combinare i test DiDriven e NonDataDriven nella stessa classe di test.
Esecuzione di SimpleDataDrivenExample con TAEF
Assicurarsi di conoscere come creare test basati sui dati e come eseguire test con TAEF prima di iniziare con suggerimenti e consigli per l'esecuzione di DataDrivenTest con TAEF. Potrebbe essere utile aggiornare la memoria sul funzionamento di Selection con TAEF.
Il prompt dei comandi per l'esecuzione di test basati sui dati non è molto diverso dall'esecuzione di alcun test generico con TAEF. Per eseguire entrambi gli esempi (nativi e gestiti) descritti in precedenza, eseguire il comando seguente:
TE.exe Examples\CPP.DataDriven.Example.dll Examples\CSharp.DataDriven.Example.dll /name:*Simple*
"/name" aggiunge criteri di selezione in base al nome e sceglie solo le classi a cui si è interessati. Per selezionare i test da eseguire all'interno delle classi, è necessario innanzitutto elencare tutte le proprietà della dll. È quindi possibile decidere quali proprietà usare per i criteri di selezione.
TE.exe Examples\CPP.DataDriven.Example.dll Examples\CSharp.DataDriven.Example.dll /name:*Simple* /listproperties
f:\Examples\CPP.DataDriven.Example.dll
WEX::TestExecution::Examples::SimpleDataDrivenExample
Property[Description] = Simple example in table-based data-driven tests
WEX::TestExecution::Examples::SimpleDataDrivenExample::DataDrivenTest#0
Setup: TestSetup
Teardown: TestCleanup
Property[DataSource] = Table:SimpleDataDrivenExample.xml#SimpleTable
Data[Color] = White
Data[Size] = 4
WEX::TestExecution::Examples::SimpleDataDrivenExample::DataDrivenTest#1
Setup: TestSetup
Teardown: TestCleanup
Property[DataSource] = Table:SimpleDataDrivenExample.xml#SimpleTable
Data[Color] = Black
Data[Size] = 10
WEX::TestExecution::Examples::SimpleDataDrivenExample::DataDrivenTest#2
Setup: TestSetup
Teardown: TestCleanup
Property[DataSource] = Table:SimpleDataDrivenExample.xml#SimpleTable
Data[Color] = Orange
Data[Size] = 9
WEX::TestExecution::Examples::SimpleDataDrivenExample::DataDrivenTest#3
Setup: TestSetup
Teardown: TestCleanup
Property[DataSource] = Table:SimpleDataDrivenExample.xml#SimpleTable
Data[Color] = Blue
Data[Size] = 9
WEX::TestExecution::Examples::SimpleDataDrivenExample::FirstNonDataDrivenTest
Setup: TestSetup
Teardown: TestCleanup
WEX::TestExecution::Examples::SimpleDataDrivenExample::SetsOfDataTest#metadataSet0
Setup: TestSetup
Teardown: TestCleanup
Property[Data:Color] = {Purple, Maroon, Brown}
Data[Color] = Purple
WEX::TestExecution::Examples::SimpleDataDrivenExample::SetsOfDataTest#metadataSet1
Setup: TestSetup
Teardown: TestCleanup
Property[Data:Color] = {Purple, Maroon, Brown}
Data[Color] = Maroon
WEX::TestExecution::Examples::SimpleDataDrivenExample::SetsOfDataTest#metadataSet2
Setup: TestSetup
Teardown: TestCleanup
Property[Data:Color] = {Purple, Maroon, Brown}
Data[Color] = Brown
WEX::TestExecution::Examples::SimpleDataDrivenExample::SecondNonDataDrivenTest
Setup: TestSetup
Teardown: TestCleanup
f:\Examples\CSharp.DataDriven.Example.dll
WEX.Examples.CSharpDataDrivenSimpleExample
Setup: MyClassInitialize
Property[Description] = Simple example in table-based data-driven tests
WEX.Examples.CSharpDataDrivenSimpleExample.DataDrivenTest#0
Property[DataSource] = Table:CSharpDataDrivenSimpleExample.xml#SimpleTable
Data[Color] = White
Data[Size] = 4
WEX.Examples.CSharpDataDrivenSimpleExample.DataDrivenTest#1
Property[DataSource] = Table:CSharpDataDrivenSimpleExample.xml#SimpleTable
Data[Color] = Black
Data[Size] = 10
WEX.Examples.CSharpDataDrivenSimpleExample.DataDrivenTest#2
Property[DataSource] = Table:CSharpDataDrivenSimpleExample.xml#SimpleTable
Data[Color] = Orange
Data[Size] = 9
WEX.Examples.CSharpDataDrivenSimpleExample.DataDrivenTest#3
Property[DataSource] = Table:CSharpDataDrivenSimpleExample.xml#SimpleTable
Data[Color] = Blue
Data[Size] = 9
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
Per il momento, si ignorerà setOfMetadataTest e SetsOfDataTest elencati in precedenza. Per altre informazioni, leggere altre informazioni sui test basati sui dati di peso leggero. Ora che si conoscono le varie proprietà e il nome e i valori dei parametri di dati, è possibile selezionare test specifici in base a tale proprietà. Provali e segui la procedura per confermare ciò che selezioni.
Per eseguire solo i test non basati sui dati, eseguire:
TE.exe Examples\CSharp.DataDriven.Example.dll Examples\CPP.DataDriven.Example.dll /select:"@Name='*Simple*' And not(@DataSource=*)"
A questo momento, per eseguire solo i test basati sui dati, in cui il colore viene specificato come "Nero", eseguire:
TE.exe Examples\CSharp.DataDriven.Example.dll Examples\CPP.DataDriven.Example.dll /select:"@Name='*Simple*' And @Data:Color='Black'"
Proprio come per "Color", @Data:<DataDrivenParameterName>=<DataDrivenParameterValue> eseguirà dati specifici in base al valore del parametro DataDriven specificato. Nel caso precedente, verrà eseguito WEX::TestExecution::Examples::SimpleDataDrivenExample::D ataDrivenTest#1 e WEX. Examples.CSharpDataDrivenSimpleExample.DataDrivenTest#1
Si notino gli indici di test nelle proprietà dell'elenco precedente. È anche possibile selezionare l'oggetto precedente in base all'indice.
TE.exe Examples\CSharp.DataDriven.Example.dll Examples\CPP.DataDriven.Example.dll /select:"@Name='*Simple*' And @Data:Index=1"
In precedenza verranno eseguiti gli stessi due test @Data:Color=selezionati da "Nero". È anche possibile aggiungere guardie alla selezione dell'indice con @Data:Index > lowerGuardValue e @Data:index< upperGuardValue
Se si conoscono le nozioni di base dei test basati sui dati con TAEF, seguire la classe successiva negli stessi esempi: Override dei metadati a livello di riga, Specifica dei tipi di parametri di matrice.