単体テストの効率化を考える(9)
テストドライバを実装してみる

どもです。

前回までで、テストの入力と出力の期待値が明記されたデシジョンテーブルの作成ができました。
そこで今回は、作成したデシジョンテーブルに従って、実際にテストドライバを実装、単体テストを実行してみます。

1.単体テストの環境

単体テストを実装する前に、単体テストを実装/実行する環境を示します。

単体テストの実行環境
項目 内容
OS Windows10 Pro(1909)
CPU i7-8700
メモリ 16GB
IDE VisualStudioCommnuity 2019
version 16.5.1
テストフレームワーク google test
1.10.0

2.テスト対象の関数

トコロで、テスト対象となる関数は仕様は明確にしていましたが、実装したコードを書いていませんでした。
なので、今更ながらコードを紹介します。

#include <stdio.h>

int sample_function(int a, int b)
{
	int state = 0;

	if (0 <= a) {
		if (0 <= b) {
			state = 1;	//第1象限
		} else {
			state = 4;	//第4象限
		}
	} else {
		if (0 <= b) {
			state = 2;	//第2象限
		} else {
			state = 3;	//第3象限
		}
	}
	return state;
}

3.テストドライバ

前回作成したデシジョンテーブルに基づいて実装したテストドライバが、以下のようになります。

#include <stdio.h>
#include "gtest/gtest.h"

//テスト対象関数
int sample_function(int a, int b);

TEST(think_about_unit_test_009, sample_function_001)
{
	int a = 0;
	int b = 0;

	int ret = sample_function(a, b);

	ASSERT_EQ(1, ret);
}
(以下、長くなるので省略)

このコードを簡単に解説すると、最初にテスト対象関数への入力値を定義/設定します。
その後、テスト対象関数を実行します。
最後に、関数の実行結果である戻り値を確認します。
あとは、これをビルド/実行すれば、OKです。

4.まとめ

今回は、前回のエントリで作成したデシジョンテーブル/テスト設計に基づいてテストドライバを実装してみました。
デシジョンテーブル上では、テストケースは9件でしたが、全て実装すると長くなる、かつ各関数が似たようなコードばっかりになってしまうので、テストケースは1件だけに止めました。
しかし、テストドライバの実装での最も基本的な内容である(と、私が考えている)以下の内容は満足できていると思います。

  1. 入力値を設定する
  2. テスト対象関数を実行する
  3. 実行結果の確認/判定
    (結果と期待値の比較)

ここまでで、単体テストのテスト設計と、それに基づいたテストドライバの実装ができました。
次回は、テスト設計(書)から今回実装したテストドライバを自動で生成する仕組みを実装していきます。
(やっとスタートラインに立てました!)

ではっ!