海野秀之(うんのひでゆき)の外部記憶
Twitter (twilog) / RSS / アンテナ / ぶくま
ぼくにとって、はじめて使う単体テストフレームワークが Cutter なので、 他のと比較できないんですが、噂に聞いていた CUnit の問題点はいくつもクリアーされているみたい。
やっぱり、Cutter にしてよかった。
テストの追加が容易(test_hoge って名前にしておくと、勝手に追加される、とか)というのは、 超重要。テストを書くのが面倒臭いようでは、いけない。CUnit がどうだったのかは、知らないんだけど。
で、ちょっと気にしていたのが、 C言語におけるTDDの問題点と解決方法 に書かれている問題だったですが……。
Cutter では、かなりスマートに解決されているみたいです。 Cutter を用いたテストでは、 テストコード、テスト対象コードともに、共有ライブラリとして Cutter からリンクされます。 どの関数をどういう名前の共有ライブラリにまとめるのか、とか、テストでリンクするライブラリとかは、 Makefile で自由に制御できるところがミソかな。 ここで、きちんと考えてやれば、スタブの競合のような問題はすんなり、スマートに回避できます。
テストのためだけの #ifdef とかを開発物中に一切書かなくても良いってのは、かなりポイント高いと思う。
Linux 上で、ruby-1.8.7-p72 を configure, make した場合、File.flock の実装に flock(2) が使われるみたい。
Solaris 10 上でビルドしたやつをみると、configure 時に checking flock が no になって、 missing/flock.c が使われていた。結果、fcntl(2) が使われる。
http://www.linux.or.jp/JM/html/LDP_man-pages/man2/flock.2.html によれば、 Linux の flock(2) は NFS 上のファイルをロックしないそうだ。
これ……、ローカルファイルシステム上で動作確認した Ruby プログラムが、 NFS 上ではきちんと動かなくなったりするってこと?
ふうむ。
このへんをみるに、 Solaris で checking flock が no になったのは、configure を実行したディレクトリが NFS 上にあったのと、SunOS における flock の実装(NFS 上では失敗してエラーを返す)が効いているよう。
Linux はどうかな、って、個人的にはどうでもいいんだけど(苦笑。 気が向いたら実験してみよう。
むかし、~/html/wiki/ あたり(NFS マウントされている)に設置した Hiki のファイルが時折ぶっこわれた理由がこれだったり、しないよね?
おぉ!<br>わかってらっしゃる!
えへへー。<br><br>すばらしいです、Cutter をつかったテスト環境。ありがたや、ありがたや。