Bagikan melalui


Pengujian Penulisan di C++

Contoh kode berikut menunjukkan file C++ asli yang berisi satu kelas pengujian dengan dua metode pengujian di atasnya.

1   #include "WexTestClass.h"
2
3   class SimpleTests   {
4      // Declare this class as a TestClass, and supply metadata if necessary.
5      TEST_CLASS(SimpleTests);
6
7      // Declare the tests within this class.
8      TEST_METHOD(FirstTest);
9      TEST_METHOD(SecondTest);
10  };
11
12  void SimpleTests::FirstTest()
13  {
14      VERIFY_ARE_EQUAL(1, 1);
15  }
16
17  void SimpleTests::SecondTest()
18  {
19      VERIFY_IS_TRUE(true);
20  }

Baris 1 menyertakan file header tunggal yang diperlukan untuk kerangka kerja, WexTestClass.h, ditemukan di %\Program Files (x86)\Windows Kits\10\Testing\Development\inc. File header yang disertakan juga menyertakan file Log.h untuk Pencatat dan file Verify.h untuk menentukan kasus verifikasi. File header ini akan dibahas nanti.

Baris 3 mendefinisikan Kelas pengujian, SimpleTests. Kelas pengujian tidak perlu mewarisi dari kelas khusus apa pun. Selain itu, konten mereka tidak perlu di publik.

Baris 5 mendefinisikan kelas ini sebagai kelas pengujian.

Baris 8 dan 9 mendeklarasikan dua metode pengujian di kelas - FirstTest dan SecondTest. Mereka didefinisikan pada baris 12 hingga 20. Makro TEST_METHOD menambahkan deklarasi metode yang diperlukan ke kelas . Dalam skema mark-up ini, semua pengujian harus memiliki prototipe yang sama. Mereka harus kembali batal, dan mereka tidak boleh mengambil parameter.

Jika Anda ingin menentukan tes sebaris dalam deklarasi kelas, Anda dapat melakukannya selama Anda menyertakan "WexTestClass.h" saat INLINE_TEST_METHOD_MARKUP didefinisikan dalam prapemrossor.

1   #define INLINE_TEST_METHOD_MARKUP
2   #include "WexTestClass.h"
3
4   class InlineTests
5   {
6       TEST_CLASS(InlineTests);
7 
8       TEST_METHOD(FirstTest)
9       {
10          VERIFY_ARE_EQUAL(1, 1);
11      }
12
13      TEST_METHOD(SecondTest)
14      {
15          VERIFY_IS_TRUE(true);
16      }
17  };

Baris 10 dan 15 sekarang berisi definisi metode pengujian.

Catatan Jika Anda meletakkan deklarasi kelas pengujian dalam file header, yang terbaik adalah hanya menyertakan file header tersebut ke dalam satu file cpp. Termasuk deklarasi kelas pengujian ke dalam beberapa file CPP menghasilkan data asing yang dikompilasi ke dalam DLL pengujian.

Pengujian Penulisan Tingkat Lanjut di C++

Contoh berikut menggunakan metode penyiapan dan pembersihan dan mendeklarasikan metadata bersama dengan kelas pengujian dan deklarasi metode pengujian. Contoh ini juga berisi satu kelas (MetadataAndFixturesTests) dengan dua metode pengujian.

 1  #define INLINE_TEST_METHOD_MARKUP
 2  #include "WexTestClass.h"
 3
 4  BEGIN_MODULE()
 5      MODULE_PROPERTY(L"Feature", L"TAEF")
 6  END_MODULE()
 7
 8  MODULE_SETUP(ModuleSetup)
 9  {
10      return true;
11  }
12
13  MODULE_CLEANUP(ModuleCleanup)
14  {
15      return true;
16  }
17
18  class MetadataAndFixturesTests
19  {
20      BEGIN_TEST_CLASS(MetadataAndFixturesTests)
21          TEST_CLASS_PROPERTY(L"Component", L"Verify")
22      END_TEST_CLASS()
23
24      TEST_CLASS_SETUP(ClassSetup)
25      {
26          return true;
27      }
28
29      TEST_CLASS_CLEANUP(ClassCleanup)
30      {
31          return true;
32      }
33
34      TEST_METHOD_SETUP(TestSetup)
35      {
36          return true;
37      }
38
39      TEST_METHOD_CLEANUP(TestCleanup)
40      {
41          return true;
42      }
43
44      // If you use this syntax, you will have to define the test outside of the test class.
45      BEGIN_TEST_METHOD(FirstTest)
46          TEST_METHOD_PROPERTY(L"Owner", L"Contoso")
47      END_TEST_METHOD()
48
49      // You can still have metadata even if you define your test inside the test class.
50      TEST_METHOD(SecondTest)
51      {
52          BEGIN_TEST_METHOD_PROPERTIES()
53              TEST_METHOD_PROPERTY(L"Owner", L"Contoso")
54          END_TEST_METHOD_PROPERTIES()
55
56          VERIFY_IS_TRUE(true);
57      }
58  };
59
60  void MetadataAndFixturesTests::FirstTest()
61  {
62      VERIFY_ARE_EQUAL(1, 1);
63  }

Baris 4 memulai deklarasi metadata global, sekumpulan properti yang berlaku untuk biner pengujian yang dikompilasi header ini.

Baris 5 mendeklarasikan properti dengan nama Fitur dan nilai TAEF. Mungkin ada lebih dari satu properti antara BEGIN... dan END... Macro. Deklarasi properti serupa ada pada baris 20-24 (metadata tingkat kelas), 45-47 (metadata tingkat metode), dan 52-54 (metadata tingkat pengujian dalam pengujian yang ditentukan sebaris).

Baris 45 - 47 dan 60 – 63 menunjukkan makro pengujian ini untuk menambahkan metadata juga mendeklarasikan metode pengujian. Baris 50 - 57 menunjukkan Anda masih dapat memiliki metadata bahkan jika Anda ingin mendeklarasikan dan menentukan Anda menguji di lokasi yang sama.

Baris 8 mendeklarasikan fungsi penyiapan modul - fungsi yang dijalankan sebelum pembuatan salah satu kelas pengujian modul.

Baris 13 mendeklarasikan fungsi pembersihan modul - fungsi yang dijalankan setelah semua pengujian dan metode pembersihan kelas dan destruktor selesai. Ada metode penyiapan dan pembersihan serupa untuk kelas pada baris 24 meskipun 32. Metode ini berjalan setelah konstruktor kelas dan sebelum destruktor kelas masing-masing.

Baris 34 hingga 42 mendeklarasikan fungsi serupa untuk metode pengujian. Metode penyiapan dan pembersihan pengujian berjalan sebelum dan sesudah setiap pengujian dijalankan.

Metode penyiapan dan pembersihan TAEF mengembalikan bool dan tidak menerima parameter. Nilai pengembalian memberi sinyal ke kerangka kerja apakah dapat terus menjalankan pengujian untuk unit pengujian tertentu. Misalnya, jika metode penyiapan kelas gagal dan mengembalikan false, kerangka kerja tidak akan menjalankan metode pengujian kelas.