C言語でEV3開発(6)

2021年1月30日

どもです。
今回のエントリーは、前回のエントリーの続き、google testでの単体テスト環境についてです。
前回のエントリーでは、google testのコードをプロジェクトに取り込み、テストコードと一緒にビルドする方法について書きました。
そこで今回は、google testを静的ライブラリとしてビルド、リンクして実行ファイルを生成する方法について紹介します。
なお、google testのコードをダウンロード・展開してあることを前提とします。
場所は、

~/gtest

を想定します。

1. 静的ライブラリのビルド

では、実際にビルドするための手順を、以下に示します。

ev3@ev3-VirtualBox:cd gtest
ev3@ev3-VirtualBox:~/gtest$ ./configure
v3@ev3-VirtualBox:~/gtest$ export GTEST_DIR=~/gtest
ev3@ev3-VirtualBox:~/gtest$ g++ -I${GTEST_DIR}/include -I${GTEST_DIR} -c ${GTEST_DIR}/src/gtest-all.cc
ev3@ev3-VirtualBox:~/gtest$ ar -rv libgtest.a gtest-all.o
ar: creating libgtest.a
a - gtest-all.o
ev3@ev3-VirtualBox:~/gtest$ cd make
ev3@ev3-VirtualBox:~/gtest/make$ make gtest_main.o
g++ -isystem ../include -I.. -g -Wall -Wextra -pthread -c \
			../src/gtest_main.cc
ev3@ev3-VirtualBox:~/gtest/make$ ar -rv libgtest_main.a gtest_main.o
ar: creating libgtest_main.a
a - gtest_main.o
ev3@ev3-VirtualBox:~/gtest/make$ cp ./libgtest_main.a ../
ev3@ev3-VirtualBox:~/gtest/make$ cd ../
ev3@ev3-VirtualBox:~/gtest$ ls -la *.a
-rw-rw-r-- 1 ev3 ev3 932674  xxx  x xxxxx libgtest.a
-rw-rw-r-- 1 ev3 ev3  19972  xxx  x xxxxx libgtest_main.a

以上、最後に静的ライブラリが2つ作成されています。

2. 静的ライブラリのリンクの設定

ここでは、静的ライブラリをリンクするための設定について記載します。
といっても、手順は簡単。
eclipseのプロジェクトプロパティで、[C/C++ビルド]-[設定]-[ツール設定]-[GCC C++Linker]-[ライブラリー]で、以下の設定を行います。
[ライブラリー(-l)]
pthread
gtest
gtest_main
[ライブラリ検索パス(-L)](1. 静的ライブラリのビルドで、静的ライブラリが出力されたディレクトリ)
以上で、ライブラリの設定は完了です。

3. テストコード

実際にライブラリを使用したテストコードと、テストの実行です。

まず、以下のようなクラス、およびメソッドを作成します。

//.h
class CGTestTarget {
public:
	CGTestTarget();
	virtual ~CGTestTarget();
	int TestFunction(int n1, int n2);
};

//.cpp
#include "CGTestTarget.h"

using namespace std;

CGTestTarget::CGTestTarget() {}
CGTestTarget::~CGTestTarget() {}
int CGTestTarget::TestFunction(int n1, int n2) {
	return (n1 + n2);
}
				

次にテストコードです。今回は、「TestFunction」というメソッドのテストを実行します。
実際のテストコードは、以下。

//ソースファイル
#include 
#include "gtest/gtest.h"
#include "CGTestTarget.h"
using namespace std;

TEST(CTestTargetTest, Test001) {
	//	入力変数
	int n1;
	int n2;
	int actual;
	int expect;
	CGTestTarget target;

	//	入力値の設定
	n1 = 2;
	n2 = 3;
	expect = 5;

	//	テストの実効
	actual = target.TestFunction(n1, n2);

	//	結果の確認
	ASSERT_EQ(actual, expect);
}

なお、コード上の"gtest/gtest.h"をインクルードするためには、"gtest/include"フォルダをインクルードパスに追加しておく必要があります。
これまでの設定、およびコードを作成してビルドします。
ビルドされたファイルを実行することで、単体テストが実行されます。
なお、今回の結果では、以下のようになります。
google_test_sample_result_1
テストの内容は、非常に単純なので、ここは割愛します。
結果を見ての通り、1ケースのテストが実行され、結果が「OK」となっています。

4.まとめ

以上がgoogle testをライブラリ化し、それを使用して単体テストを実行するための手順になります。
ではっ!