Gaucheプログラミング(立読み版)

CGIのユニットテストを書く Slideshow

CGIのユニットテストを書く

www.cgi-testライブラリを使ってCGIスクリプトを実際に動作させるテストが作れます。

CGIに含まれる関数群はモジュール化してgauche.testの単体テストを行い、CGIのファンクショナルテストにwww.cgi-testを使いましょう。

「www.cgiライブラリを利用する」で書いたhello.cgiのテストを書いてみましょう。

テストコードはtest-hello.scmというファイル名にして、hello.cgiと同じフォルダに置いてください。

(use gauche.test)
(use www.cgi-test)

(test-start "CGI Test")

(test* "Hello Gauche"
       "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\"\n       \"http://www.w3.org/TR/html4/strict.dtd\">\n<html><body><p>Hello, Gauche!</p\n></body\n></html\n>"
       (values-ref (run-cgi-script->string
                    "./hello.scm"
                    :environment '((REQUEST_METHOD . "GET")))
                   1)
       )

(test-end)

通常のユニットテストと違い、gauche.testに加えてwww.cgi-testを読み込みます。

次の箇所でwww.cgi-testの関数を使っています。

       (values-ref (run-cgi-script->string
                    "./hello.cgi"
                    :environment '((REQUEST_METHOD . "GET")))
                   1)

run-cgi-script->stringはCGIスクリプトを実行し、その結果をHTTPヘッダのリストと文字列の二つの値(多値)にして返す関数です。このテストではヘッダーの値はテストしないので、values-refで二つ目の値(0から始まるので二つ目は1)になる文字列だけを取得しています。 ここで得られる文字列はhello.cgiが返すHTMLそのものなので、test*で比較する値はブラウザが受けとるHTMLをそのまま書いています。

run-cgi-script->stringの引数は左から順にCGIスクリプトのパス、オプション引数で環境変数とCGIに渡すパラメータを指定できます。

パラメータを渡す例:

; hello.cgi?name=TAROU&age=12とアクセスした場合
(run-cgi-script->string
        "./hello.cgi"
        :environment '((REQUEST_METHOD . "GET"))
        :parameters '((name . "TAROU")
                      (age . 12)))

以上のようにしてCGIスクリプトをHTTPサーバを使わずに実行してテストすることができます。

www.cgi-testには、run-cgi-script->stringと返り値の種類が違う同種の関数が用意されています。

run-cgi-script->string-listは行単位の文字列のリストにして返します。 run-cgi-script->sxmlはHTMLやXMLをS式で表わすSXMLにして返します。実際のアプリケーションは複雑で大きなHTMLを返します。そのようなHTMLから一部分を抽出して比較したい場合にrun-cgi-script->stringは不便です。SXMLにするとHTMLがSchemeのリストになるため、高度な処理が簡単に記述できるようになります。Gacuhe作者の川合氏が作っているWikiエンジンのWiLiKiにはSXMLのパターンマッチを使ったテスト用ライブラリsxml.xml-testがあります。是非参考にしてください。

 by yusei

Comment Form:

コメント・トラックバック規約を必ずお読みください。

 

Comments:

2007/04/30 11:57:44 shiro
www.cgi-testは最近のGaucheではwww.cgi.testが正式名です。

Trackback URL: http://karetta.jp/trackback/book/017585/017591

Trackbacks:


このサイトについて|ヘルプ|Q&A|個人情報保護|プライバシーポリシー|利用規約|コメント・トラックバック規約|削除規程|広告掲載
Copyright (c) 2005-2007 Time Intermedia Corporation