[Gauche-devel-jp] 環境によって結果が違う関数のテスト (Re: module名を文字列で指定してロードしたい)

Back to archive index

yasuy****@javao***** yasuy****@javao*****
2003年 12月 15日 (月) 17:18:19 JST


えんどうです。

環境によって結果が違う関数のテストコードはどう書くのが良いでしょうか...?

>   [function] dbd-search-driver-modules

こんな関数を書きました。

(define (dbd-all-driver-modules)
  (let ((modules
	 (library-map
	  'dbd.*
	  (lambda (m p)
	    (cons m
		  (car
		   (string-split
		    (sys-basename p) #\.)))))))
    (if (null? modules) #f
	modules)))

この関数のテストコードとして以下を書き、テスト合格としたのですが、
同じことをやって同じ結果が返るのは当り前なので、
テストとして正当なのか確信が持てません。

;; dbd-all-driver-modules のテスト:
;; library-map を使い、存在する 'dbd.* モジュールすべてを得、
;; dbd-all-driver-modules の戻り値と比較する。一致していたら合格
(test* "dbd-all-driver-modules"
       (library-map
	'dbd.*
	(lambda (m p)
	  (cons m
		(car
		 (string-split (sys-basename p) #\.)))))
       (dbd-all-driver-modules))

>   [function] dbd-search-driver-module driver-name

この実装として以下の関数を書きました。

(define (dbd-search-driver-module driver-name)
  (let ((driver-module
	 (path->module-name (string-append "dbd/" driver-name))))
    (if (library-exists? driver-module)
	driver-module
	#f)))

これをテストするのに以下を書いても、
"pg" ドライバーがない環境ではテストできません。

(test* "dbd-search-driver-module"
       'dbd.pg
       (dbd-search-driver-module "pg"))

すべてのドライバー名を得てひとつづつテストするしかないのかも知れません。

存在しないドライバー名をテストするには、

(test* "dbd-searh-driver-module null"
       #f
       (dbd-search-driver-module ""))

これで良いのか自信ありません。

-- 
ENDO Yasuyuki <yasuy****@javao*****>
http://www.javaopen.org/~yasuyuki/ (Personal/Japanese Only)
http://www.javaopen.org/jfriends/ (Japanese Only)





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