QueenCheck 使い方 サンプル
QueenCheck v0.0.0を公開しました。まだまともに使い物にならないと思いますが、とりあえず使えます。
とりあえずインストール
Gemfileに
gem 'queencheck'
と書くか
$ gem install queencheck
でOKです。簡単。
とりあえず使ってみる
では適当なサンプルを書きましょう。
require 'rubygems' require 'queencheck' num = 5 stat = QueenCheck(num, :+, Integer).run do | result, args, err | result == num + args[0] end p stat
QueenCheckをメソッドとして呼び出すと、QueenCheck::Coreのインスタンスが返ります。それをrunしているだけです。
QueenCheck()の引数は以下の順
- テスト対象のインスタンス(クラスメソッドのテスト時はクラスオブジェクト)
- メソッド名のシンボルもしくはメソッドオブジェクト(無名関数でもよい)
- 以降、対象メソッドに渡す引数のクラス
例えば、文字列と整数をうけとってつなげたものを返すメソッドのテストをしたい時は
QueenCheck(instance, :joiner, String, Integer)
と書きます。
runに渡したブロックには3つの値が渡されます。
- result: メソッド実行の返り値
- argments: 与えた引数の配列
- error: メソッド実行時に起こったException
ブロックは最後にBooleanを返してあげて、それがtrueならpass、falseならfailureとして認識され、runの返り値のQueenCheck::Resultに格納されます。
QueenCheck::Resultは
- examples: テストした回数
- passed: パスしたテストの個数
- failures: 失敗したテストの個数
- exceptions: runのblock内でExceptionを出してテストの実行に失敗した回数
のフィールドを持っています。
QueenCheck::Arbitrary
サンプルデータをカスタマイズしたい場合には、QueenCheck::Arbtraryのインスタンスを作ります。
実際に定義してみましょう。
test = QueenCheck::Arbitrary() do | seed | rand(100) end QueenCheck(Kernel, :p, test).run do | result, args, err | result == args[0] end
Arbitraryのインスタンスを受け取ってQueenCheckに渡すのですが、同じようなArbtraryを何度も作ったり、これを受け渡す為だけにグローバル変数におくのも面倒なので、名前をつけてあげましょう。
QueenCheck::Arbitrary(:test) do | seed | rand(100) end QueenCheck(Kernel, :p, :test).run do | result, args, err | result == args[0] end
QueenCheck::Arbtraryの第一引数にシンボルを渡すと名前をつけることができ、その名前をQueenCheckのAribtraryTypeとして渡すことができます。便利ですね。
Arbitraryの生成時に渡したブロックには引数seedがわたります。seedは0から1の実数値で、これらは0から始まり、1で終わります。増加するにつれてテストのランダム値の幅が向上していくと、よりテストに有効なArbitraryになるでしょう。
RSpecで使う
RSpecで使う時でも何も考えずに
QueenCheck(Kernel, :p, Integer).run do |result, args, err| result.should eq args[0] end.passed.should eq(100)
などしておけば無問題です。
バグや追加機能、もっとこうなってほしいなどの要望は
https://github.com/rosylilly/QueenCheck/issues までお気軽にご連絡ください。コードレビューもとても喜びます。