For Development HEAD DRAFTSearch (procedure/syntax/module):

11.19 srfi.78 - 軽量なテスト

Module: srfi.78

このsrfiは、テストを書くためのマクロcheckcheck-ec、 およびいくつかの補助手続きを定義します。 特に、check-ecはSRFI-42スタイルの内包表記で パラメータを様々に変えてテストしたい式を評価することができます。

Gaucheでは、このモジュールはgauche.testとうまく協働するようになっています (gauche.test - 単体テスト参照)。 gauche.testがアクティブ (つまりtest-starttest-endの間)に checkマクロが呼ばれた場合、それはgauche.testtestマクロの ラッパーとなり、テストの結果はgauche.test側でまとめられて報告されます。

このモジュールがgauche.testと一緒ではなく、単独で使われた場合は、 結果報告も含めsrfiで述べられている通りに動きます。つまり、このsrfiで書かれた テストは2通りの方法で実行できるということです。それ単独でロードされた場合は 素のSRFI-78として、そしてgauche.testを使うテストファイルからincludeされた 場合はgauche.testの一部として。

Macro: check expr => expected
Macro: check expr (=> equal) expected

[SRFI-78]{srfi.78} expectedequalを評価し、次にexprを評価してその結果を expectedの結果とequalを使って比べます。 最初の形式では、equalとしてequal?が使われます。

Macro: check-ec qualifier … expr => expected (argument …)
Macro: check-ec qualifier … expr (=> equal) expected (argument …)
Macro: check-ec qualifier … expr => expected
Macro: check-ec qualifier … expr (=> equal) expected

[SRFI-78]{srfi.78} qualifierで指定される変数束縛の全ての組み合わせの下で、 exprequalexpectedを繰り返し評価し、 その度にexprexpectedequalで比較します。 もし異なっていれば、それが失敗として記録され、check-ec全体が失敗として 終了します。全ての組み合わせにおいてexprexpectedの結果が一致すれば、 check-ec全体が成功とみなされます。

qualifierの指定方法はSRFI-42に準じます。 詳しくはsrfi.42 - 先行評価的内包表記を参照してください。

次のテストは、フェルマー数 (2^2^n + 1) が素数かどうかを順に調べています。 F_5は合成数なのでテストは失敗します。

(use math.prime)
(check-ec (: n 6)
          (:let fn (+ (expt 2 (expt 2 n)) 1))
          (bpsw-prime? fn)
          => #t (n))
 ⇒
 prints Checking (bpsw-prime? fn), expecting #t => ERROR: got #f, with n: 5

レポートの観点からは、check-ec全体がひとつのチェックとして扱われます。

Function: check-report

[SRFI-78]{srfi.78} このモジュールが単独で使われた場合、現在の出力ポートにこれまでのテスト結果のまとめを 出力します。

このモジュールがgauche.testと一緒に使われた場合は何もしません。 テスト結果報告はgauche.testによって行われます。

Function: check-set-mode! mode

[SRFI-78]{srfi.78} テストの進行と結果をどう報告するかを指定します。これはgauche.testと一緒に 使われた時には意味を持ちません。

modeには次のシンボルのいずれかを指定します。

off

(check-report)も含め、結果は一切報告しません。

summary

(chec-report)が呼ばれた時にまとめを報告するだけです。

report-failed

summaryの動作に加え、チェックが失敗した場合にその都度報告します。

report

summaryの動作に加え、チェック毎にその成功失敗を報告します。

デフォルトはreportです。

Function: check-reset!

[SRFI-78]{srfi.78} 内部のテスト結果記録をクリアします。gauche.testの結果記録には影響を及ぼしません。

Function: check-passed? expected-total-count

[SRFI-78]{srfi.78} これはプログラム内から、最後のcheck-reset!もしくはプログラム開始以降に 期待した数のテストが成功したかどうかを調べるのに使えます。 expected-total-countには期待される成功したテストの数を渡します。 テスト失敗がなく、成功したテストの数がexpected-total-countに一致すれば #tが、そうでなければ#fが返されます。

これはgauche.testと一緒に使った場合でも有効です。ただし、 カウントされるのはcheckcheck-ecの結果のみです。



For Development HEAD DRAFTSearch (procedure/syntax/module):
DRAFT