次のコード例は、2 つのテスト メソッドを含む 1 つのテスト クラスを含むネイティブ C++ ファイルを示しています。
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 }
1 行目には、% \Program Files (x86)\Windows Kits\10\Testing\Development\inc にあるフレームワークに必要な単一のヘッダー ファイル WexTestClass.h が含まれています。このヘッダー ファイルには、Logger の Log.h ファイルと、検証ケースを定義するための Verify.h ファイルも含まれています。 これらのヘッダー ファイルについては、後で説明します。
3 行目 では、テスト クラス SimpleTests が定義されています。 テスト クラスは、特別なクラスから継承する必要はありません。 また、コンテンツを公開する必要はありません。
5 行目 では、このクラスをテスト クラスとして定義します。
8 行目と 9 行目では、クラスの FirstTest と SecondTest の 2 つのテスト メソッドが宣言されています。 これらは 12 行目から 20 行目で定義されます。 TEST_METHOD マクロは、必要なメソッド宣言をクラスに追加します。 このマークアップ スキームでは、すべてのテストに同じプロトタイプが必要です。 void を返す必要があり、パラメーターを取ってはなりません。
クラス宣言内でテストをインラインで定義する場合は、プリプロセッサで INLINE_TEST_METHOD_MARKUP が定義されている間に "WexTestClass.h" を含める限り、これを行うことができます。
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 };
10 行目と 15 行目 には、テスト メソッドの定義が含まれるようになりました。
手記 テスト クラス宣言をヘッダー ファイルに配置する場合は、そのヘッダー ファイルを 1 つの cpp ファイルにのみ含めるのが最善です。 複数の CPP ファイルにテスト クラス宣言を含めると、余分なデータがテスト DLL にコンパイルされます。
C++ での高度な作成テスト
次の例では、セットアップ メソッドとクリーンアップ メソッドを使用し、テスト クラスとテスト メソッドの宣言と共にメタデータを宣言します。 この例には、2 つのテスト メソッドを持つ 1 つのクラス (MetadataAndFixturesTests) も含まれています。
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 }
4 行目 は、グローバル メタデータの宣言を開始します。これは、このヘッダーがコンパイルされるテスト バイナリに適用されるプロパティのセットです。
5 行目 では、 Feature という名前と値 TAEF を持つプロパティを宣言します。 BEGIN... と END... マクロの間には、複数のプロパティが存在する可能性があります。 同様のプロパティ宣言は、20 から 24 行目 (クラス レベルのメタデータ)、45 から 47 (メソッド レベルのメタデータ)、52 ~ 54 行目 (テスト定義インラインのテスト レベル メタデータ) に存在します。
45 行目から 47 行目と 60 行目から 63 行目 では、メタデータを追加するためのこれらのテスト マクロもテスト メソッドを宣言しています。 50 行目から 57 行目 では、同じ場所でテストを宣言して定義する場合でも、メタデータを持つことができます。
8 行目 では、モジュールのセットアップ関数 (モジュールのテスト クラスの作成前に実行される関数) が宣言されています。
13 行目 では、モジュール クリーンアップ関数 (すべてのテストとクラス クリーンアップ メソッドとデストラクターの完了後に実行される関数) が宣言されています。 24 行目から 32 行目のクラスにも同様のセットアップとクリーンアップメソッドがあります。 これらのメソッドは、クラス コンストラクターの後、およびクラス デストラクターの前にそれぞれ実行されます。
34 行目から 42 行目では、 テスト メソッドに対して同様の関数が宣言されています。 テストのセットアップとクリーンアップのメソッドは、各テストの実行前と実行後に実行されます。
TAEF セットアップおよびクリーンアップ メソッドはブール値を返し、パラメーターを受け取らなくなります。 戻り値は、特定のテスト ユニットのテストを実行し続けることができるかどうかをフレームワークに通知します。 たとえば、クラスセットアップメソッドが失敗し、false を返した場合、フレームワークはクラステストメソッドを実行しません。