Shiro Kawai
shiro****@lava*****
2003年 12月 15日 (月) 18:46:18 JST
From: yasuy****@javao***** Subject: [Gauche-devel-jp] 環境によって結果が違う関数のテスト Date: Mon, 15 Dec 2003 17:18:19 +0900 > 環境によって結果が違う関数のテストコードはどう書くのが良いでしょうか...? 難しいです。私にも決め手はありません。異なる方法で同じ結果が得られ る場合は、そうやって両者を比較したりしますが。そうでなければわかる 範囲でしかテストできませんね。 もうひとつの方法は、固定したテスト環境を作ってしまうことです。 今回はそれが使えるかもしれません。 > こんな関数を書きました。 > > (define (dbd-all-driver-modules) [...] > この関数のテストコードとして以下を書き、テスト合格としたのですが、 > 同じことをやって同じ結果が返るのは当り前なので、 > テストとして正当なのか確信が持てません。 一応、この場合はlibrary-mapがちゃんと動いていればまあ動くはず、 なんですが、やっぱり同じ操作で比較するのは難がありますね。 ところで、library-mapはデフォルトで*load-path*内から モジュールを探してきますから、テストディレクトリ以下にダミーの dbd/foo.scm 等を作ってやって、*load-path* を一時的に そちらに向けて、dbd-all-driver-modulesを実行するという手が 使えるかもしれません。 (test* "dbd-all-driver-modules" (fluid-let ((*load-path* '("./test/"))) ...)) こんなふうに*load-path*を変更するのは普通のアプリでは やらないのですが、テストなら仕方ないでしょう。 なお、library-map 等はautoloadされますので、上記のように *load-path* がシステムデフォルトパスを含まないと、autoload に失敗するかもしれません。その場合は、ダミーのlibrary-map の呼び出しをテストの前に行ってあらかじめファイルをロードして おくようにしてください。 > これをテストするのに以下を書いても、 > "pg" ドライバーがない環境ではテストできません。 > > (test* "dbd-search-driver-module" > 'dbd.pg > (dbd-search-driver-module "pg")) これも同様に、ダミードライバーをテストディレクトリに置いた 環境でテストすると良いでしょう。それなら、存在しない ドライバー名のテストも出来ます。 なお、それ以外のテストのことも考えると、全てのdbdプロトコルを サポートするダミードライバーみたいなものがdbi/dbdパッケージに 同梱されていると良いかもしれません。 --shiro