Table of Contents
Google test を導入してみる :GTEST:
普段、マイコンを使った組み込みシステムの開発業務をしている中で、 テスト駆動開発の必要性を感じることがあり、ちょっとずつでも単体テスト手 法を学んでいこうかなぁ、というモチベーションがありまして。今回はGoogle Test を導入してまずは環境を整えてみることにします。
Google test のインストール(MSYS2環境)
参考: https://manabisystem.com/how-to-install-google-test-on-msys2/
諸々の事情から Windows 環境がメインなのでMSYS2環境に導入します。上記 によると本家のGit Hub上にあるソースコードではうまくいかないらしいので、 pacman を使って導入するのが吉らしいです。
$ pacman -S mingw-w64-x86_64-gtest
何の問題もなくインストールできました(バージョンは、 mingw64/mingw-w64-x86_64-gtest 1.11.0-5 でした)。
Google test の動作確認
インストールした Google Test を早速ためしてみます。インターネット上 を探せば例はいくつもでてきますが、勉強中の手持ちの本で、「モダンC言語 プログラミング, 花井志王,ASCII DWANGO」、があるのでこの中での例を試して みます。
※参考書の中では eclipse を使って Google Test を動かしていますが、簡単 な例ならコマンドラインからでも十分なのでコマンドラインで g++ を使いま す。
準備するのは4つのコードです。
・ add_test.cc ・・・ テストコード。
・ add.c, add.h ・・・ 検証対象の関数(add)。
・ main.c ・・・ main 関数。
[add_test.cc]
#include "gtest/gtest.h"
#include "add.h"
TEST(AddTest, onePlusTwoGivesThree) {
EXPECT_EQ(3, add(1, 2));
}
[add.h]
#ifndef ADD_H_
#define ADD_H_
#ifdef __cplusplus
extern "C" {
#endif
int add(int i1, int i2);
#ifdef __cplusplus
}
#endif
#endif
[add.c]
#include "add.h"
int add(int i1, int i2) {
//return 0; ← Fail を出したいときのコード
return i1 + i2;
}
[main.c]
#include "gtest/gtest.h"
int main(int argc, char **argv) {
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
この4つのコードを、コマンドラインからg++ を使ってコンパイルすると test.exe ができ、テストが実行できます。なお、コンパイル時には gtest と pthread をライブラリとして使用しています(参考書に書いてある通りです)。
g++ add_test.cc add.c main.c -Lc:/msys64/mingw64/lib -lgtest -lpthread -o test
結果は次の通りとなり、テストに成功しました。
# # ./test.exe
[==========] Running 1 test from 1 test suite.
[----------] Global test environment set-up.
[----------] 1 test from AddTest
[ RUN ] AddTest.onPlusTwoGivesThree
[ OK ] AddTest.onPlusTwoGivesThree (0 ms)
[----------] 1 test from AddTest (0 ms total)
[----------] Global test environment tear-down
[==========] 1 test from 1 test suite ran. (0 ms total)
[ PASSED ] 1 test.
これで Google Test できる環境が動作することが確認できました。今後少しず つ学習を進めていきたいと思います。