Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Bagian ini mencakup beberapa fitur canggih pengujian berbasis data dengan cara contoh. Jika Anda masih membahas dasar-dasarnya, Anda mungkin ingin memulai dengan Contoh Berbasis Data Sederhana .
Contoh yang dirujuk:
ArraySupportDataDrivenExample
CSharpDataDrivenArraySupportExample
Bagian sebelumnya telah membahas dasar-dasar penulisan dan eksekusi pengujian berbasis data. Daftar berikut membahas arti Array dalam indra Pengujian Berbasis Data TAEF:
- Array adalah panjang variabel, set jenis elemen homogen yang diperlakukan sebagai parameter tunggal.
- Untuk menentukan jenis array, Anda perlu secara eksplisit menentukan jenis parameter di blok ParameterTypes dan menambahkan atribut Array="true".
Jenis parameter yang didukung tercantum dalam Jenis Parameter di Sumber Data Tabel.
Jika ada jenis data lain yang ditentukan, pengujian akan melemparkan peringatan dan menganggapnya sebagai String. Dalam kasus array, jenis data akan dianggap berjenis String[].
Contoh berikut menunjukkan cara menentukan bahwa parameter adalah array dari salah satu jenis dasar. Penting untuk dicatat bahwa tidak ada jenis default yang diizinkan dalam kasus array - Anda harus secara eksplisit menentukan jenis dan mengatur atribut Array agar parameter benar.
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>
Periksa tag Nilai dan atribut Array dalam contoh di atas. Pertama, Anda harus secara eksplisit menentukan jenis untuk parameter Ukuran dan Color dan menentukan bahwa parameter ini adalah array, dengan mengatur atribut Array ke true. Kemudian Anda menentukan nilai dalam>Nilai <...</Nilai> tag. Anda dapat memiliki tag> Nilai <sebanyak yang Anda butuhkan untuk menentukan sejumlah nilai dalam array untuk parameter Baris tertentu.
Perhatikan baris 9, 10, 30, dan 33 dalam contoh XML di atas. Entri ini adalah elemen array bernilai tunggal. Dengan kata lain, Anda dapat menentukan elemen array bernilai tunggal langsung di tag> Parameter <tanpa tag> Nilai <tambahan. Juga, meskipun parameter dalam baris hanya memiliki satu nilai, parameter tersebut masih diperlakukan sebagai array dari satu elemen dan tidak dapat diambil sebaliknya.
Sekarang, lihat API pengambilan.
Pengambilan Asli
Elemen array dapat diambil dalam kode asli, dengan menggunakan WEX::TestExecution::TestDataArray<> kelas templat. Lihat header testData.h yang diterbitkan untuk detailnya. Kelas TestDataArray mengelola masa pakai elemen array dan menyediakan API yang berguna untuk mengambil nilai tertentu dalam array:
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 */
Anda dapat memperoleh panjang array dengan memanggil GetSize dan bisa mendapatkan elemen tertentu dengan menggunakan operator [].
Contoh berikutnya menunjukkan cara menggunakan fungsi-fungsi ini dalam kode. Pertimbangkan file cpp dalam contoh asli:
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 }
Pertama, Anda menentukan TestDataArray lokal dari jenis array. Dalam hal ini, ukuran adalah array jenis int dan warna adalah array jenis WEX::Common::String. API untuk mengambil Array mirip dengan yang mengambil variabel apa pun. Anda memanggil TestData::TryGetValue, mintalah untuk mengambil parameter ukuran, dan memasukkan nilai ke dalam variabel lokal ukuran.
Perhatikan bahwa upaya untuk mengambil parameter yang ditentukan non-array ke dalam array menyebabkan kesalahan dan gagal dalam pengujian. Demikian pula, upaya untuk mengambil array ke dalam variabel non-array, bahkan jika array hanya memiliki satu elemen, menyebabkan kesalahan.
Jika parameter array tidak ditentukan di Baris XML sama sekali, upaya untuk mengambil parameter gagal. Misalnya, jika Baris terlihat seperti:
<Row>
<Parameter Name="Color">
<Value>White</Value>
<Value>Black</Value>
</Parameter>
</Row>
Perhatikan bahwa parameter Ukuran, yang merupakan array, tidak ditentukan dalam Baris. Jika Anda mencoba mengambil Ukuran dari kode, panggilan API akan mengembalikan kode pengembalian yang gagal. Anda dapat menggunakan ini untuk menentukan nilai array default.
Di sisi lain, Anda dapat menentukan array kosong dengan menentukan tag parameter kosong untuk Ukuran sebagai berikut:
<Row>
<Parameter Name="Size"></Parameter>
<Parameter Name="Color">
<Value>White</Value>
<Value>Black</Value>
</Parameter>
</Row>
Dalam hal ini, upaya untuk mengambil ukuran akan berhasil, tetapi ukuran array akan menjadi 0.
pengambilan terkelola
Pengambilan terkelola tetap hampir sama seperti sebelumnya - hanya Anda yang perlu memastikan untuk mengambil nilai ke dalam variabel lokal dari jenis array yang sesuai. Pertimbangkan contoh terkelola berikut:
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 }
Mirip dengan pengambilan asli, jika parameter array tidak ditentukan di Baris XML sama sekali, upaya untuk mengambil parameter mengembalikan objek jenis System.DBNull. Misalnya, jika Baris terlihat seperti:
<Row>
<Parameter Name="Color">
<Value>White</Value>
<Value>Black</Value>
</Parameter>
</Row>
Perhatikan bahwa parameter Ukuran, yang merupakan array, tidak ditentukan dalam Baris. Jika Anda mencoba mengambil Ukuran dari kode, panggilan API akan mengembalikan objek jenis DBNull. Jika Anda memiliki nilai tersebut dalam tabel, Anda mungkin ingin mengambilnya dari konteks ke objek terlebih dahulu dan mengambil langkah-langkah yang sesuai setelah membandingkan jenis objek dengan jenis (System.DBNull) atau jenis yang Anda keluarkan.
Di sisi lain, Anda dapat menentukan array kosong dengan menentukan tag parameter kosong untuk Ukuran sebagai berikut:
<Row>
<Parameter Name="Size"></Parameter>
<Parameter Name="Color">
<Value>White</Value>
<Value>Black</Value>
</Parameter>
</Row>
Dalam hal ini, upaya untuk mengambil ukuran succeessfully mengembalikan array kosong jenis System.Int32[].
Eksekusi
Menjalankan pengujian berbasis data yang mendukung array tidak berbeda dengan menjalankan pengujian berbasis data lainnya. Satu-satunya titik perbedaan utama adalah bahwa sematika dari perubahan kriteria pemilihan dalam kasus parameter data array yang berarti "berisi" daripada "sama".
Untuk melihat apa artinya ini, asumsikan bahwa Anda ingin memilih semua pengujian berbasis data di mana array Color berisi nilai White. Untuk melakukan ini, jalankan:
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'"
Perintah ini menjalankan pengujian berbasis data dengan indeks #0 dan #3 dalam kedua kasus di atas.
Anda dapat membuat kueri yang lebih kompleks yang misalnya, hanya memilih pengujian di mana array warna berisi putih dan array warna berisi hitam , yang hanya akan memilih pengujian berbasis data dengan indeks #3. Sebagai latihan, coba tulis dan jalankan kueri ini sendiri.