Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tej sekcji omówiono niektóre zaawansowane funkcje testowania opartego na danych, korzystając z przykładu. Jeśli nadal znasz podstawy, warto zacząć od przykładu Simple Data Driven Example.
Przykłady, do których odwołuje się:
ArraySupportDataDrivenExample
CSharpDataDrivenArraySupportExample
W poprzednich sekcjach opisano już podstawy tworzenia i wykonywania testów opartych na danych. Na poniższej liście omówiono znaczenie Tablice w sensie testowania opartego na danych TAEF:
- Tablice są zmienną długością, homogeniczny zestaw elementów, które są traktowane jako pojedynczy parametr.
- Aby określić typ tablicy, należy jawnie określić typ parametru w bloku ParameterTypes i dodać atrybut Array="true".
Obsługiwane typy parametrów są wymienione w typach parametrów w źródłach danych tabeli.
Jeśli określono inny typ danych, test zgłasza ostrzeżenie i uważa, że jest to ciąg. W przypadku tablic typ danych będzie traktowany jako ciąg[].
W poniższym przykładzie pokazano, jak określić, że parametr jest tablicą jednego z podstawowych typów. Należy pamiętać, że w przypadku tablic nie ma dozwolonych typów domyślnych — należy jawnie określić typ i ustawić atrybut Array parametru na wartość true.
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>
Zapoznaj się z tagami wartości i atrybutami tablicy w powyższym przykładzie. Najpierw należy jawnie określić typ parametrów rozmiaru i Color oraz określić, że te parametry są tablicami, ustawiając atrybut tablicytrue. Następnie należy określić wartości w <Wartości>...</Value> tagów. Można mieć dowolną liczbę tagów <value>, ponieważ musisz określić dowolną liczbę wartości w tablicy dla danego parametru wiersza.
Zwróć uwagę na wiersze 9, 10, 30 i 33 w powyższych przykładach XML. Te wpisy są elementami tablicy o pojedynczej wartości. Innymi słowy, można określić elementy tablicy o pojedynczej wartości bezpośrednio w tagu <Parametr> bez dodatkowego tagu <Value>. również , mimo że parametr w wierszu ma tylko jedną wartość, nadal jest traktowany jako tablica jednego elementu i nie można go pobrać w przeciwnym razie.
Teraz przyjrzyj się interfejsom API pobierania.
pobieranie natywne
Elementy tablicy można pobrać w kodzie natywnym przy użyciu WEX::TestExecution::TestDataArray<> klasy szablonu. Aby uzyskać szczegółowe informacje, zobacz opublikowany nagłówek TestData.h. Klasa TestDataArray zarządza okresem istnienia elementów tablicy i udostępnia przydatne interfejsy API do pobierania określonych wartości w tablicy:
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ługość tablicy można uzyskać przez wywołanie GetSize i uzyskanie określonego elementu przy użyciu operatora [].
W następnym przykładzie pokazano, jak używać tych funkcji w kodzie. Rozważmy plik cpp w przykładzie natywnym:
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 }
Najpierw należy zdefiniować lokalną tablicę TestDataArray typu tablicy. W tym przypadku rozmiary jest tablicą typu int, a kolory jest tablicą typu WEX::Common::String. Interfejs API do pobrania tablicy jest podobny do tej, która pobiera dowolną zmienną. Wywołasz TestData::TryGetValue, poproś go o pobranie parametru rozmiarui umieszczenie wartości w zmiennych lokalnych rozmiarach.
Należy pamiętać, że próba pobrania parametru innego niż określona tablica do tablicy powoduje błąd i niepowodzenie testu. Podobnie próba pobrania tablicy do zmiennej innej niż tablica, nawet jeśli tablica ma tylko jeden element, powoduje błąd.
Jeśli w ogóle nie określono parametru tablicy w wierszu XML, próba pobrania parametru zakończy się niepowodzeniem. Jeśli na przykład wiersz wyglądał następująco:
<Row>
<Parameter Name="Color">
<Value>White</Value>
<Value>Black</Value>
</Parameter>
</Row>
Zwróć uwagę, że parametr Size, który jest tablicą, nie jest określony w wierszu. Jeśli spróbujesz pobrać Size z kodu, wywołanie interfejsu API zwróci kod powrotu z błędem. Można go użyć do zdefiniowania domyślnej wartości tablicy.
Z drugiej strony można określić pustą tablicę, określając pusty tag parametru dla Size w następujący sposób:
<Row>
<Parameter Name="Size"></Parameter>
<Parameter Name="Color">
<Value>White</Value>
<Value>Black</Value>
</Parameter>
</Row>
W takim przypadku próba pobrania rozmiaru zakończy się powodzeniem, ale rozmiar tablicy będzie wynosić 0.
pobieranie zarządzane
Pobieranie zarządzane pozostaje prawie takie samo jak wcześniej — należy tylko upewnić się, że wartości są pobierane do zmiennej lokalnej odpowiedniego typu tablicy. Rozważmy następujący przykład zarządzany:
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 }
Podobnie jak w przypadku pobierania natywnego, jeśli parametr tablicy nie jest określony w wierszu XML w ogóle, próba pobrania parametru zwraca obiekt typu System.DBNull. Jeśli na przykład wiersz wyglądał następująco:
<Row>
<Parameter Name="Color">
<Value>White</Value>
<Value>Black</Value>
</Parameter>
</Row>
Zwróć uwagę, że parametr Size, który jest tablicą, nie jest określony w wierszu. Jeśli spróbujesz pobrać Size z kodu, wywołanie interfejsu API zwróci obiekt typu DBNull. Jeśli w tabeli znajdują się jakiekolwiek takie wartości, możesz najpierw pobrać je z kontekstu do obiektu i wykonać odpowiednie kroki po porównaniu typu obiektu z typeof(System.DBNull) lub typu, który jest exepecting.
Z drugiej strony można określić pustą tablicę, określając pusty tag parametru dla Size w następujący sposób:
<Row>
<Parameter Name="Size"></Parameter>
<Parameter Name="Color">
<Value>White</Value>
<Value>Black</Value>
</Parameter>
</Row>
W tym przypadku próba pobrania rozmiaru pomyślnie zwraca pustą tablicę typu System.Int32[].
wykonywanie
Wykonywanie testów opartych na danych, które obsługują tablice, nie różni się od wykonywania innych testów opartych na danych. Jedynym kluczowym punktem różnicy jest to, że sematyka kryteriów wyboru zmienia się w przypadku parametrów danych tablicy na wartość "contains", a nie "equals".
Aby zobaczyć, co to oznacza, załóżmy, że chcesz wybrać wszystkie testy oparte na danych, w których tablica Color zawiera wartość White. Aby to zrobić, uruchom polecenie:
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'"
To polecenie uruchamia testy oparte na danych z indeksem #0 i #3 w obu powyższych przypadkach.
Można tworzyć bardziej złożone zapytania, na przykład wybrać tylko test, w którym tablica koloru zawiera biały, a tablica koloru zawiera , który wybierałby tylko testy oparte na danych z indeksem 3. W ramach ćwiczenia spróbuj samodzielnie napisać i wykonać to zapytanie.