ETロボコンで使うAPIをモック化してみた
これは、ETロボコン Advent Calendar 2014 - Adventarの 14日目のエントリーです。
本カレンダー初の2日連続投稿となってしまいました。
やはり、前回の記事の続編となります。
作ってみた
前回の記事で書いた通り、PCMockに付属するRubyスクリプトを使うとMockを自動生成できます。
しかし、ETロボコンで使用するAPIはいくつかのヘッダファイルに分散しているため、プロトタイプ宣言をひとつのファイルにまとめた後にMockを生成しました。
公開した
前回の記事でモックについていろいろ書いてみたものの、実際に動いているところを見ないとMockの用途がわかりにくいと思うので、環境を作って公開しました。
サンプルとしてモータからエンコーダ値を取得して方位を計算するプログラム(direction.c)と、それをテストするためのテストコード(test_direction.c)を同梱しています。
テストコードを読むとわかりますが、モータのエンコーダ値を取得するためのAPIが正しく呼ばれているかチェックし、戻り値のエンコーダ値をテストコード側で指定しています。
これをビルドして、実行すると...
テストが実行され、結果が表示されます。
NXTにプログラムを転送することなく、ロジックのチェックが完了します。
付録:使い方(長くなります...)
動かすためにはgit, ruby, gcc, makeとeclipseが必要です。
まずはcloneします。
$ git clone https://github.com/yuuu/etrobo_ut_sample.git Cloning into 'etrobo_ut_sample'... remote: Counting objects: 29, done. remote: Compressing objects: 100% (22/22), done. remote: Total 29 (delta 2), reused 26 (delta 2) Unpacking objects: 100% (29/29), done. Checking connectivity... done.
次にworkspaceを作成してPCUnitをclone, makeします。
$ mkdir workspace $ cd workspace $ git clone https://github.com/katono/PCUnit.git Cloning into 'PCUnit'... remote: Counting objects: 1906, done. remote: Total 1906 (delta 0), reused 0 (delta 0) Receiving objects: 100% (1906/1906), 463.81 KiB | 90.00 KiB/s, done. Resolving deltas: 100% (1174/1174), done. Checking connectivity... done. $ cd PCUnit/PCUnit/ $ make gcc -Wall -W -Os -DPCU_USE_WCHAR -c PCUnit.c gcc -Wall -W -Os -DPCU_USE_WCHAR -c PCU_Test.c gcc -Wall -W -Os -DPCU_USE_WCHAR -c PCU_Suite.c gcc -Wall -W -Os -DPCU_USE_WCHAR -c PCU_Libc.c ar rcs libpcunit.a PCUnit.o PCU_Test.o PCU_Suite.o PCU_Libc.o $ cd ../../
workspaceディレクトリをワークスペースに指定してeclipseを開きます。
プロジェクトのインポートダイアログを開き、cloneした「etrobo_ut_sample」を指定します。
プロジェクトをビルドした後、シェル上で
$ cd etrobo_ut/ $ ./execute_tests.sh
とすると、テストが実行されます。