こんにちは、もがちゃんです。
今回の記事では、C言語のテストでCppUTestを使用する際に知っておくべきことについて紹介します。
目次
C++から利用できる関数定義の方法
CppUTestは、基本的にはC++を使用して実行されるので、C言語で作成した関数をテストするには、C++からC言語で作成した関数を呼びさせるように宣言する必要があります。
C++からC言語で作成した関数を呼び出せるようにするには、関数定義を以下のように定義する必要があります。
#ifdef __cplusplus
extern "C" {
extern 関数のプロトタイプ宣言
}
#endif // __cplusplus
作成したテストを実行するには
作成したテストを実行するには、以下のソースで各テストを実行します。
#include "CppUTest/CommandLineTestRunner.h"
int main(int argc, char* argv[])
{
return CommandLineTestRunner::RunAllTests(argc, argv);
}
CppUTestで使用するマクロたち
TESTマクロ
- TEST(テストグループ識別子, テスト識別子)
実行するテストを定義します。テスト実行時の順番は、ソースファイルの下の方に記述したテストから上の方へ実行されます。
テストに順序性を持たせる場合には注意が必要です。 - IGNORE_TEST(テストグループ識別子, テスト識別子)
実行しないテスト定義します。(不要になったテストや一時的に不要になったテストにIGNORE_を付けてテストとして実行されないようにすることが出来ます) - TEST_GROUP(テストグループ識別子)
テストグループとテストグループ内の各テストを実行する前後に行う処理を定義します。
// テストグループ:sample_test
TEST_GROUP(sample_test) {
}
// テストグループ:sample_test、test003
TEST(sample_test, test003) {
// 最後に実行されるテスト
}
// テストグループ:sample_test、test002
IGNORE_TEST(sample_test, test002) {
// 実行されないテスト
}
// テストグループ:sample_test、test001
TEST(sample_test, test001) {
// 最初に実行されるテスト
}
- TEST_SETUP()
テストグループ内の各テストを実行する前に行う処理を定義します。 - TEST_TEARDOWN()
テストグループ内の各テストを実行する後に行う処理を定義します。
CHECKマクロ
テスト結果が正しいか否かの判定に使用するのが、CHECK(boolean condition)マクロです。他にもマクロはありますが、最低限このCHECK(boolean condition)を知っていればチェックができます。
引数はboolean型なので、テスト結果が正しい場合に真となるような条件を記述して使用します。
TEST(テストグループ識別子, テスト識別子) {
/*
* int resultに検証したい値が入っていて
* result が 0の場合に検査合格とするとする場合の記述例
*/
CHECK(0 == result);
}
テスト実行前処理と後処理の定義
各テストを実行する前や後に初期処理や後処理を行いたい事がある場合は、テストグループ内にTEST_SETUP()とTEST_TEARDOWN()を定義することが出来ます。
TEST_SETUP()には、テスト実行前に行いたい初期処理を記述し、TEST_TEARDOWN()には、テスト実行後に行いたい後処理を記述します。
TEST_GROUP(テストグループ識別子)
{
void TEST_SETUP()
{
// 初期処理を記述する部分
}
void TEST_TEARDOWN()
{
// 後処理を記述する部分
}
};
CppUTestを使う際に知っておくべき事のまとめ
- テスト対象とするC言語で作成した関数を定義する際は、C++から呼び出せるようextern “C”を使用して宣言する。
- テストグループやテストを作成する際は、TESTマクロを使用する
- テスト実行時の順番は、ソースの下の方に定義したテストから上のほうに実行されます。
- テスト結果を判定する際は、CHECKマクロを使用する
- 各テスト実行前後に初期処理や後処理を行いたい場合は、テストグループ内にsetup()、teardown()を作成して定義する