Bagikan melalui


Memanfaatkan TAEF Sebajang-Baiknya

Kerangka Kerja Penulisan dan Eksekusi Pengujian memberi Anda platform yang kuat untuk menulis dan menjalankan pengujian Anda. Mungkin bermanfaat untuk memahami beberapa di balik layar yang berfungsi detail TAEF untuk memanfaatkannya sebaik mungkin. Halaman ini membahas beberapa tips dan fitur yang akan membantu Anda menulis pengujian untuk mengoptimalkan dan memaksimalkan apa yang ditawarkan TAEF. Pastikan Anda terbiasa dengan dasar-dasar Pengujian Penulisan dan Pelaksanaan dengan TAEF.

Menyiapkan (atau Menginisialisasi) dan Metode Pembersihan

Metode penyiapan dan pembersihan pada tingkat perakitan (juga dikenal sebagai perlengkapan), jalankan sekali per eksekusi DLL. Demikian pula metode penyiapan dan pembersihan tingkat kelas dijalankan sekali per kelas. Metode penyiapan dan pembersihan tingkat pengujian sama untuk semua pengujian dalam kelas, dan dipanggil sekali sebelum dan sesudah setiap pengujian di kelas.

Mungkin hanya ada satu pengaturan tingkat perakitan dan metode pembersihan per perakitan, satu pengaturan tingkat kelas dan metode pembersihan per kelas, dan satu pengaturan pengujian dan metode pembersihan per kelas. Perhatikan bahwa metode penyiapan dan pembersihan kelas statis dalam kode terkelola, tetapi tidak statis dalam kode C++.

Jika pengecualian diaktifkan (kasus default), eksekusi metode apa pun dihentikan pada panggilan Verifikasi pertama yang gagal. Jika Anda telah secara eksplisit menonaktifkan panggilan Verifikasi berbasis pengecualian (lihat bagian Verifikasi di Pengujian Penulisan untuk detailnya), Anda harus memiliki pernyataan kondisional eksplisit untuk mengatur alur kontrol setelah panggilan Verifikasi gagal.

Dalam kasus di mana kegagalan terjadi dalam metode Penyiapan (baik dengan cara pengecualian berdasarkan kegagalan verifikasi atau dengan pengaturan mengembalikan kegagalan secara eksplisit), pengujian yang harus diikuti dianggap "Diblokir" dan dicatat seperti itu. Misalnya, jika metode Penyiapan tingkat Kelas Anda gagal, semua metode pengujian di Kelas dianggap "Diblokir" dan masing-masing metode tersebut akan dicatat. Selain itu, metode Pembersihan tidak akan dipanggil jika kegagalan terjadi dalam metode Penyiapan.

Metode Uji

Tidak diperlukan untuk mencatat hasil pengujian secara eksplisit. Jika semua Verifikasi panggilan dalam pengujian Anda berhasil, pengujian akan dicatat sebagai "Lulus". Pada panggilan Verifikasi pertama yang gagal, eksekusi metode pengujian akan berakhir (kecuali Anda telah secara eksplisit menonaktifkan pengecualian berdasarkan panggilan Verifikasi - dalam hal ini pernyataan kondisional Anda akan menentukan alur kontrol di sana setelah tetapi terlepas dari penangguhan berikut) dan pengujian akan ditandai sebagai "Gagal".

Demikian pula, jika Anda memiliki pembungkus VERIFIKASI (tergantung pada jenis pengembalian dan apa yang menentukan keberhasilan) di sekitar panggilan pemanggilan metode pembantu, Anda tidak perlu memeriksa dan mencatat hasilnya secara eksplisit.

Menentukan Metadata

Pencarian metadata bersifat hierarkis. Ini berarti jika pernyataan pemilihan Anda adalah /select:"@Priority=2", dan jika TestMethod Anda tidak menentukan Priority, TAEF akan mencari di kelas yang berisinya. Jika metadata tingkat Kelas tidak menentukannya, TAEF mencari di tingkat perakitan.

Jadi, jika Anda ingin semua atau sebagian besar pengujian di kelas Anda memiliki "Prioritas" yang sama, atau mengatakan "Pemilik, Anda bisa mendapatkannya hanya dengan menentukannya di tingkat kelas. Untuk satu atau beberapa pengujian yang merupakan pengecualian untuk aturan ini, Anda dapat secara eksplisit memberikan metadata di tingkat "TestMethod". Lihat pengujian berikut untuk detailnya:

1    namespace WEX { namespace UnitTests { namespace Samples
2    {
3        //
4        // Declare module level properties
5        //
6        BEGIN_MODULE() //This metadata applies to all the classes and tests in this module or assembly
7            MODULE_PROPERTY(L"GroupOwner", L"SomeGroup")
8        END_MODULE()
9        class PremiumBankAccountTests
10       {
11           //
12           // Declare this class to be a test class with an'advanced' declaration
13           // Use advanced declaration when you want to set metadata on the class
14           //
15           BEGIN_TEST_CLASS(PremiumBankAccountTests) //This metadata applies to all the test in this class
16               TEST_CLASS_PROPERTY(L"Priority", L"2")
17               TEST_CLASS_PROPERTY(L"DevOwner", L"Someone")
18               TEST_CLASS_PROPERTY(L"PMOwner", L"Someone")
19           END_TEST_CLASS()
20           //
21           // Declare class setup - a method that runs after class constructor
22           // and before any test class methods and test setup method
23           //
24           TEST_CLASS_SETUP(SetDefaultAccountType);
25           //
26           // Declare class cleanup - a methods that runs after all the class test methods and test setup method
27           // and before the class destructor
28           //
29           TEST_CLASS_CLEANUP(ResetDefaultAccountType);
30           //
31           // Declare test setup and cleanup - methods that run before and after the execution
32           // of every test method correspondingly
33           //
34           TEST_METHOD_SETUP(CreateBankAccount);
35           TEST_METHOD_CLEANUP(DestroyBankAccount);
36           //
37           // Declare test methods with an 'advanced' declaration
38           // Use advanced declaration when you want to set metadata on the methods
39           //
40           BEGIN_TEST_METHOD(DebitTest)
41               TEST_METHOD_PROPERTY(L"BVT", L"TRUE")
42               TEST_METHOD_PROPERTY(L"PERF", L"TRUE")
43               TEST_METHOD_PROPERTY(L"STRESS", L"FALSE")
44               TEST_METHOD_PROPERTY(L"Priority", L"1") //Overrides the Class level Priority value
45           END_TEST_METHOD()
46           BEGIN_TEST_METHOD(CreditTest)
47               TEST_METHOD_PROPERTY(L"BVT", L"TRUE")
48               TEST_METHOD_PROPERTY(L"PERF", L"FALSE")
49               TEST_METHOD_PROPERTY(L"STRESS", L"TRUE")
50               TEST_METHOD_PROPERTY(L"GroupOwner", L"SomeGroupTest") //Overrides the GroupOwner specified at the Module level
51           END_TEST_METHOD()
52   
53           std::unique_ptr<BankAccount> m_spBankAccount;
54           BankAccountType m_defaultType;
55       };
56   } /* namespace Samples */ } /* namespace UnitTests */ } /* namespace WEX */

CATATAN: Untuk pengujian terkelola, penulisan dilakukan dengan cara yang sama. Tingkat modul sama dengan markup tingkat Assembly dalam terkelola. Untuk spesifikasi metadata tingkat Perakitan atau Tingkat kelas dalam kode terkelola, markup harus disediakan sebelum metode Initializer statis. Ini mungkin berarti bahwa Anda mungkin harus menyediakan Initializer kosong jika pengujian Anda belum memilikinya. Desain ini dibuat secara khusus untuk memastikan kompatibilitas VSTS.

Dalam kasus pengujian berbasis data berbasis tabel, Anda dapat melangkah lebih jauh dan mengambil alih metadata tingkat pengujian dengan menentukannya di tingkat Baris. Lihat Contoh Pengujian Berbasis Data Penimpaan Metadata untuk detailnya.