[Senna-dev 848] Re: Rubyバインディングのテストの走らせ方

Back to archive index

Kouhei Sutou kou****@cozmi*****
2008年 5月 14日 (水) 10:24:16 JST


須藤です。

2008/05/09 16:47 Tasuku SUENAGA <a****@razil*****>:

> 将来的には、SennaQLという言語でテストを書く予定です。

これは、SennaQL上にテスティングフレームワークを構築してテストを
作成する、という感じになるのでしょうか?

SennaQLは入出力はS式でいけるので、他のScheme処理系でテストを書
いて、SennaQLの処理系に入出力をつなげてテストをするということも
できると思います。

こんなイメージです。

SennaQL:
  (define (plus x y)
    (if (zero? y)
      x
      (plus (+ x 1) (- y 1))))

Scheme:
  (call-with-process-io "senna /tmp/xxx"
    (lambda (input output)
      (display input "(plus 1 3)")
      (assert-equal 4 (read output))))


昔はuimもこんな風にしてテストをしていました。

この方法のメリットはこんな感じです。

  * SennaQLがそんなに便利関数を持っていなくても、Scheme処理系が
    便利関数をたくさんもっていれば楽にテストが書ける
  * SennaQLが落ちてもテストが続行される
  * SennaQL用のテスティングフレームワークを作らなくてもよい

デメリットはこんな感じです。

  * 別プロセスを起動するので普通より遅い


この方法を使うならScheme処理系は多言語対応しているのでGaucheが
いいと思います。そういえば、Gauche用のテスティングフレームワーク
としてGaUnitというのがあります。
  http://www.cozmixng.org/~rwiki/index.rb?cmd=view;name=GaUnit

今よりももっと楽にテストを書けるようなAPIが追加しようという意志が
あるようです。




Senna-dev メーリングリストの案内
Back to archive index