[Gauche-devel-jp] Re: 環境によって結果が違う関数のテスト

Back to archive index

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




Gauche-devel-jp メーリングリストの案内
Back to archive index