鳩舎

レースしない

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()の引数は以下の順

  1. テスト対象のインスタンス(クラスメソッドのテスト時はクラスオブジェクト)
  2. メソッド名のシンボルもしくはメソッドオブジェクト(無名関数でもよい)
  3. 以降、対象メソッドに渡す引数のクラス

例えば、文字列と整数をうけとってつなげたものを返すメソッドのテストをしたい時は

QueenCheck(instance, :joiner, String, Integer)

と書きます。

runに渡したブロックには3つの値が渡されます。

  1. result: メソッド実行の返り値
  2. argments: 与えた引数の配列
  3. 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 までお気軽にご連絡ください。コードレビューもとても喜びます。