Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tato část popisuje některé pokročilé funkce testování řízeného daty příkladem. Pokud stále pokrýváte základy, možná budete chtít začít jednoduchým příkladem řízeného dat.
Příklady, na které se odkazuje:
ArraySupportDataDrivenExample
CSharpDataDrivenArraySupportExample
Předchozí části už zahrnovaly základy vytváření a spouštění testů řízených daty. Následující seznam popisuje význam pole v smyslu testování řízeného dat TAEF:
- Pole jsou proměnlivá délka, homogenní sada prvků, které jsou považovány za jediný parametr.
- Chcete-li zadat typ pole, musíte explicitně zadat typ parametru v bloku ParameterTypes a přidat atribut Array="true".
Podporované typy parametrů jsou uvedeny v typy parametrů ve zdrojích dat tabulky.
Pokud je zadán jakýkoli jiný datový typ, test vyvolá upozornění a považuje ho za řetězec. V případě polí by byl datový typ považován za typ String[].
Následující příklad ukazuje, jak určit, že parametr je pole jednoho ze základních typů. Je důležité si uvědomit, že v případě polí nejsou povoleny žádné výchozí typy – musíte explicitně zadat typ a nastavit atribut Array, aby parametr byl pravdivý.
1 <?xml version="1.0"?>
2 <Data>
3 <Table Id="ArraySupportTable">
4 <ParameterTypes>
5 <ParameterType Name="Size" Array="true">int</ParameterType>
6 <ParameterType Name="Color" Array="true">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">
14 <Value>4</Value>
15 <Value>6</Value>
16 <Value>8</Value>
17 </Parameter>
18 <Parameter Name="Color">
19 <Value>Red</Value>
20 <Value>Green</Value>
21 <Value>Blue</Value>
22 </Parameter>
23 </Row>
24 <Row>
25 <Parameter Name="Size">
26 <Value>9</Value>
27 <Value>12</Value>
28 <Value>16</Value>
29 </Parameter>
30 <Parameter Name="Color">Orange</Parameter>
31 </Row>
32 <Row>
33 <Parameter Name="Size">9</Parameter>
34 <Parameter Name="Color">
35 <Value>White</Value>
36 <Value>Black</Value>
37 </Parameter>
38 </Row>
39 </Table>
40 </Data>
Prozkoumejte značky Value a atributy Array v příkladu výše. Nejprve musíte explicitně zadat typ pro parametry Size i Color a určit, že tyto parametry jsou pole, nastavením atributu Array na true. Potom zadáte hodnoty ve značkách <Hodnota>...</Value>. Můžete mít tolik <hodnot> značky, kolik potřebujete zadat libovolný počet hodnot v poli pro daný parametr řádku.
Všimněte si řádků 9, 10, 30 a 33 v příkladech XML výše. Tyto položky jsou prvky pole s jednou hodnotou. Jinými slovy, můžete zadat prvky pole s jednou hodnotou přímo ve značce <Parametr> bez další značky <Hodnota>. Také , i když má parametr v řádku pouze jednu hodnotu, je stále považován za pole jednoho prvku a nelze jej načíst jinak.
Teď se podívejte na rozhraní API pro načítání.
nativní načtení
Prvky pole lze načíst v nativním kódu pomocí WEX::TestExecution::TestDataArray<> třídy šablony. Podrobnosti najdete v publikované hlavičce TestData.h. Třída TestDataArray spravuje životnost prvků pole a poskytuje užitečná rozhraní API pro načtení konkrétních hodnot v rámci pole:
1 namespace WEX { namespace TestExecution
2 {
3 template <typename T>
4 class TECOMMON_API TestDataArray sealed
5 {
6 ...
7 public:
8 TestDataArray();
9 ~TestDataArray();
10 const size_t GetSize() const;
11 T& operator[](size_t index);
12
13 private:
14 ...
15 };
16 } /* namespace TestExecution */ } /* namespace WEX */
Délku pole můžete získat voláním GetSize a získat určitý prvek pomocí operátoru [].
Následující příklad ukazuje, jak tyto funkce používat v kódu. V nativním příkladu zvažte soubor cpp:
1 TestDataArray<int> sizes;
2 if (SUCCEEDED(TestData::TryGetValue(L"size", sizes)))
3 {
4 size_t count = sizes.GetSize();
5 for (size_t i = 0; i < count; ++i)
6 {
7 Log::Comment(String().Format(L"Size[%d] retrieved was %d", i, sizes[i]));
8 }
9 }
10
11 TestDataArray<String> colors;
12 if (SUCCEEDED(TestData::TryGetValue(L"color", colors)))
13 {
14 size_t count = colors.GetSize();
15 for (size_t i = 0; i < count; ++i)
16 {
17 Log::Comment(String().Format(L"Color[%d] retrieved was ", i) + colors[i]);
18 }
19 }
Nejprve definujete místní TestDataArray typu pole. V tomto případě velikosti je pole typu int a barvy je pole typu WEX::Common::String. Rozhraní API pro načtení pole je podobné rozhraní API, které načte libovolnou proměnnou. Zavoláte TestData::TryGetValue, požádejte ho, aby načetl parametr velikosta hodnotu vložil do místní proměnné velikosti.
Všimněte si, že pokus o načtení nematicového zadaného parametru do pole způsobí chybu a test selže. Podobně pokus o načtení pole do proměnné, která není pole, i když má pouze jeden prvek, způsobí chybu.
Pokud parametr pole není vůbec zadán v řádku XML, pokus o načtení parametru selže. Pokud například řádek vypadal takto:
<Row>
<Parameter Name="Color">
<Value>White</Value>
<Value>Black</Value>
</Parameter>
</Row>
Všimněte si, že parametr Size, což je pole, není zadán v řádku. Pokud se pokusíte načíst Velikost z kódu, volání rozhraní API vrátí kód, který selhává. Tuto možnost můžete použít k definování výchozí hodnoty pole.
Na druhou stranu můžete zadat prázdné pole zadáním prázdné značky parametru pro Velikost následujícím způsobem:
<Row>
<Parameter Name="Size"></Parameter>
<Parameter Name="Color">
<Value>White</Value>
<Value>Black</Value>
</Parameter>
</Row>
V tomto případě by pokus o načtení velikosti byl úspěšný, ale velikost pole by byla 0.
Spravované načítání
Spravované načítání zůstává téměř stejné jako předtím – je nutné, abyste hodnoty načetli do místní proměnné příslušného typu pole. Podívejte se na následující spravovaný příklad:
1 Int32[] sizes = m_testContext.DataRow["Size"] as Int32[];
2 foreach (int size in sizes)
3 {
4 Verify.AreNotEqual(size, 0);
5 Console.WriteLine("Size is " + size.ToString());
6 }
7
8 String[] colors = m_testContext.DataRow["Color"] as String[];
9 foreach (String color in colors)
10 {
11 Console.WriteLine("Color is " + color);
12 }
Podobně jako nativní načtení, pokud parametr pole není zadán v řádku XML vůbec, pokus o načtení parametru vrátí objekt typu System.DBNull. Pokud například řádek vypadal takto:
<Row>
<Parameter Name="Color">
<Value>White</Value>
<Value>Black</Value>
</Parameter>
</Row>
Všimněte si, že parametr Size, což je pole, není zadán v řádku. Pokud se pokusíte načíst Velikost z kódu, volání rozhraní API vrátí objekt typu DBNull. Pokud máte v tabulce nějaké takové hodnoty, můžete je nejprve načíst z kontextu do objektu a provést příslušné kroky po porovnání typu objektu s typeof(System.DBNull) nebo typu, který jej exepectingujete.
Na druhou stranu můžete zadat prázdné pole zadáním prázdné značky parametru pro Size následujícím způsobem:
<Row>
<Parameter Name="Size"></Parameter>
<Parameter Name="Color">
<Value>White</Value>
<Value>Black</Value>
</Parameter>
</Row>
V tomto případě pokus o načtení velikosti succeessfully vrátí prázdné pole typu System.Int32[].
spuštění
Provádění testů řízených dat, které podporují pole, se nijak neliší od provádění žádného jiného testu řízeného daty. Jediným klíčovým bodem rozdílu je to, že sématice kritérií výběru se změní v případě parametrů maticových dat tak, aby místo "rovná se" znamenaly "obsahuje".
Pokud chcete zjistit, co to znamená, předpokládejme, že chcete vybrat všechny testy řízené daty, ve kterých pole Color obsahuje hodnotu White. Provedete to spuštěním příkazu:
TE.exe Examples\CSharp.DataDriven.Example.dll /select:"@Name='*Array* And @Data:Color='White'"
TE.exe Examples\CPP.DataDriven.Example.dll /select:"@Name='*Array* And @Data:Color='White'"
Tento příkaz spustí testy řízené daty s indexem 0 a #3 v obou výše uvedených případech.
Můžete vytvořit složitější dotazy, například vybrat pouze test, ve kterém pole barev obsahuje bílou a pole barev obsahuje černou, která vybere pouze testy řízené daty s indexem č. 3. V rámci cvičení zkuste tento dotaz napsat a spustit sami.