Download
最新版はtestfunnel-20081116.tar.bz2です。リリースノートと過去のリリースはRelease Notesから取得してください。
必要な構成
ビルドできたプラットフォーム
以下のプラットフォームでビルドを確認しました(i386アーキテクチャのみ)。
- FreeBSD 6.3†1
- Ubuntu 9.04
- openSUSE 10.3
ビルドに必要なもの
ビルドは次のものに依存しています。
各プラットフォームではそれぞれ次のように準備するのが簡単です。
FreeBSD 6.3
Sanctuary 2.0、libstdと以下のportsをインストールしておきます。
- devel/libbfd†2
- devel/gnulibiberty
- devel/gettext
- devel/gmake
- java/jdk16
Ubuntu 9.04
一般的な開発環境に加え、Sanctuary 2.0、libstdと次のパッケージをインストールしておきます。
- sun-java6-jdk
- binutils-dev†2
openSUSE 10.3
一般的な開発環境に加え、Sanctuary 2.0、libstdと次のRPMをインストールしておきます。
- java-1_6_0-sun-devel-1.6.0.u7-1.1
- binutils-devel-2.17.50.20070726-14†2
実行に必要なもの
コンソールサーバ(auditor)の実行には次のものが必要です(スタンドアロンモードでファンネルを使用する場合は不要です)。
†1FreeBSDではlibthrを使用するように/etc/libmap.conf
を修正する必要があります。具体的には次のようなエントリを/etc/libmap.conf
に追加してください。
[funnel.bin]
libpthread.so libthr.so
libpthread.so.2 libthr.so.2
†2GNU Binutils 2.18またはそれ以前のバージョンを利用する場合、GNU Binutilsのバグでメモリリークが発生します。パッチを適用してからビルドしてください。GNU Binutils 2.19では、そのバグは修正されましたが、新たな別のバグによってメモリリークが発生します。スナップショットまたは匿名CVSから最新のソースツリーを取得してビルドすることを推奨します。
ビルドとインストール
コマンドラインからjava
を実行したとき、SunのJVMを実行するように環境を設定したあと†4、次の手順でビルド、インストールします。
% tar jxf testfunnel-YYYYMMDD.tar.bz2
% cd testfunnel-YYYYMMDD
% ./configure
% make†5
% su
# make install†5†6
†4 FreeBSDではjavavm(1)
を参照の上、環境変数JAVA_HOME
(またはJAVA_VENDOR
とJAVA_VERSION
)を適切に設定してください。Linuxではディストリビューションによって異なりますが、少なくても環境変数PATH
を適切に設定することで実行するJVMを切り替えることができます。その後、次のように表示されることを確認してください。
% java -version
java version "1.6.0_13"
Java(TM) SE Runtime Environment (build 1.6.0_13-b06)
Java HotSpot(TM) Client VM (build 1.6.0_13-b06, mixed mode)
†5 FreeBSDではmakeの代わりにgmakeを使用してください。
†6 インストールされるファイルは次の通りです(path
はconfigureのオプション--prefix=path
で指定したパスです)。
path/bin/auditor
path/bin/funnel
path/include/com/maroontress/testfunnel/funnel/Auditor.h
path/include/tf/TestFunnel.h
path/lib/testfunnel/auditor.jar
path/lib/testfunnel/funnel.bin
デモ
example
ディレクトリにTest Funnelを使用したテストのデモを用意してあります。ディレクトリの構成は次のようになっています。
example/target
- ターゲットとなる共有ライブラリです。スタックを操作するAPIを提供します。配列とリストによる2つの実装があり、ファクトリーメソッドで実装クラスを選択してインスタンスを生成します。
example/testsuite/ArrayStack
- 配列による実装クラスをテストするユニットテストです。
example/testsuite/ListStack
- リストによる実装クラスをテストするユニットテストです。
example/testsuite/Stack
ArrayStack
とListStack
の共通部分のコードです。example/testsuite/tutorial
- ユニットテストのAPIの使用方法を紹介するためのサンプルです。
スタンドアロンモード
スタンドアロンモードのデモを実行するには、ビルドしたディレクトリで次のようにコマンドを入力します。
% make standalone-demo
すべてのテストを順に実行していきます。tutorial
に「必ず失敗するテストメソッド」が含まれるので、そのテストが失敗したところでスタックトレースを表示して終了します。また、テスト終了後にカバレッジの結果を表示します。コンソールの表示は次のようになります。
% make standalone-demo
...
funnel.bin: tutorial.c:tf_initialize
funnel.bin: tutorial.c:memory_leak
funnel.bin: hello:world
funnel.bin: tutorial.c:tf_finalize
allocate: [pid=40335 tid=0xbf936fe8] 0x80b9210 (6 bytes)
/.../funnel/com/maroontress/libld/Tracer.c:278: in funciton `malloc`
(null):0: in funciton `strdup`
/.../example/testsuite/tutorial/tutorial.c:91: in funciton `memory_leak`
/.../funnel/com/maroontress/testfunnel/funnel/Auditor.c:87: in funciton `run`
(null):0: in funciton `_pthread_create`
1 memory leak(s) found.
*** Error code 1
Stop in /.../example/testsuite.
cd example/target && make coverage
for c in Stack.c ListStack.c ArrayStack.c ; do gcov $c ; done
File `Stack.c'
Lines executed:100.00% of 12
Stack.c:creating `Stack.c.gcov'
File `ListStack.c'
Lines executed:93.75% of 48
ListStack.c:creating `ListStack.c.gcov'
File `ArrayStack.c'
Lines executed:90.00% of 30
ArrayStack.c:creating `ArrayStack.c.gcov'
%
クライアントモード
クライアントモードのデモを実行するには、ビルドしたディレクトリで次のようにコマンドを入力します。
% java -jar auditor/auditor.jar &
Auditorのサーバウィンドウが画面に表示されたら、続けて次のようにコマンドを入力します。
% make demo
Auditorのコンソールウィンドウが表示されるので、メニューバーのRunからGoを選択してください。Auditorの詳しい操作方法はAuditor(コンソールサーバ)の使用方法を参照してください。