近年、アジャイル技法を採用する組織が急増するに従い、「単体テストフレームワーク」と呼ぶ単体テストを支援するツールが広く出回るようになりました。このフレームワークを使うと、プロジェクトが違ってもが同じ方法でテストができます。単体テストフレームワークでは、テスト・コード(テストをするためのプログラム)を書いてテストします。C言語のassert関数みたいなものとお考えください。
単体テストフレームワークは、大抵の言語向けに実装されており、多種多様です。これをまとめて「xUnit」と呼びます。例えば、Java言語用の単体テストフレームワークの「JUnit」が代表格で、多くの現場で導入しています。組み込み業界でも、数は少ないのですがxUnitを使っている組織もあります。
今回紹介するMinUnitは、他と異なり、最小限の機能だけを備えたC言語用の単体テストフレームワークです。詳細は後述しますが、中身は、改行を含めるとたった4行しかなく、実装したコードを簡単に確認できます。今回、MinUnitでの単体テストを解説します。
本テスト・ツールを使う前準備として、以下の環境を構築してください。
Cコンパイラの導入は非常に面倒ですが、じっと我慢してやりましょう。既に導入済みの方は、飛ばして結構です。なお、Cコンパイラの導入方法は、いろいろありますので、各自好きな方法で導入してください。
C言語用のツールなので、C言語の環境構築をします。今回は、MinGW(Minimum GNU for Windows)とgcc(GNU C Compiler)で構築することにします。まず、MinGWのWebサイトからインストーラをダウンロードしてください。
インストーラを実施すると以下の画面になります(図1(左))。
図1(左)は、インストーラを実行した際の画面です。「Install」を選択すると、インストールディレクトリなどを設定する画面(図1(右))が表示されます。「Continue」を選択すると図2となります。
図2は、インストールの進行画面を表したものです。右上の部分が100%となったら、「Continue」を選択します。選択後、図3が出てきます。
図3では、用途に合わせてパッケージをインストールします。今回は、「mingw32-base」と「mingw32-gcc-g++」にチェックを入れてください。その後、左上のメニューバーの「installation」から、「Apply Changes」を選択します。選択後、図4(左)が出ます。
図4(左)の画面で、「Apply」を選択してください。図4(右)が表示され、「Close」を押すと、MinGWとgccのダウンロードは終了です。続いて、パスを設定します。
Windows7の場合は、「コントロールパネル」→「システムの設定」→「システム」→「システムの詳細設定」から図5(左)の「システムのプロパティ」画面を開きます。
図5(左)の「環境変数(N)」を選択し、図5(右)の「環境変数」画面を開きます。下にある「システム環境変数(S)」の「PATH」欄を選択状態にし、「編集(I)」を選択します。末尾に、パスを指定し、「OK」を選択すれば終了です。
インストールの確認は、スタートメニューの「コマンドプロンプト」を開き、「gcc --version」と入力すると確認できます。図6のように表示されればOKです。
次に、MinUnitを導入します。MinUnitのWebサイトへ行き、リスト1に示すソースコードをコピーして、minunit.hとしてファイルを作成してください。
/* file: minunit.h */ #define mu_assert(message, test) do { if (!(test)) return message; } while (0) #define mu_run_test(test) do { char *message = test(); tests_run++; \ if (message) return message; } while (0) extern int tests_run;
次に、単体テストの対象となるソースコード(関数)をセットします。今回、リスト2に示した「test.c」の中に、単体テストを実施する関数を2つセットします。テスト対象とする関数は、足し算する関数(sum)と、引き算の関数(sub)です。足し算関数と引き算関数を入れたtest.cをminunit.hと同じディレクトリに保存してください。
#include<stdio.h> #include "minunit.h" int tests_run = 0; //テストケース数 int sum(int a, int b) { return a + b; } //足し算を行う関数 int sub(int a, int b) { return a - b; } //引き算を行う関数 static char * test_sum() { //sum関数をテストする関数 mu_assert("error sum function != 10",sum(3,7) == 10); return 0; } static char * test_sub() { //sub関数をテストする関数 mu_assert("error sub function != 5",sub(6,1) == 5); return 0; } static char * all_tests() { //テストを実施する関数 mu_run_test(test_sum); mu_run_test(test_sub); return 0; } int main(int argc, char **argv) { char *result = all_tests(); if (result != 0) { printf("%s\n",result); } else { printf("ALL OK! \n"); } printf("test num: %d\n",tests_run); return result != 0; }
minunit.hとtest.cの保存完了後、MinGWから以下のコマンドでコンパイルし、実行します。
実行結果が、図7のように表示されれば環境構築完了です。
Copyright © ITmedia, Inc. All Rights Reserved.