概要
パラメータ化テスト
詳細
RSpecでパラメータ化テストを行う
サンプル
仕様
漢数字の一〜十を数値として扱うようにStringクラスを拡張します。
・漢数字かどうかの検証
・漢数字から数値への変換
・漢数字同士の加算
を実装し、それをパラメータ化テストします。
実装コード
# encoding: utf-8 class String alias :old_plus :+ KANSUJI = {"一"=>1, "二"=>2, "三"=>3, "四"=>4, "五"=>5, "六"=>6, "七"=>7, "八"=>8, "九"=>9, "十"=>10} def kansuji_to_i return self unless KANSUJI.has_key? self KANSUJI[self] end def kansuji? return true if KANSUJI[self] false end def + (value) return self.kansuji_to_i + value.kansuji_to_i if self.kansuji? && value.kansuji? self.old_plus value end end
テストコード
# encoding: utf-8 require_relative "../string" describe "string kansuji" do describe "kansuji?" do cases = [ {value: "一", expected: true}, {value: "二", expected: true}, {value: "三", expected: true}, {value: "四", expected: true}, {value: "五", expected: true}, {value: "六", expected: true}, {value: "七", expected: true}, {value: "八", expected: true}, {value: "九", expected: true}, {value: "十", expected: true}, {value: "1", expected: false}, {value: "", expected: false}, ] cases.each do |c| it "#{c[:value]} is kansuji should return #{c[:expected]}" do ret = c[:value].kansuji? expect(ret).to eq(c[:expected]) end end end describe "kansuji_to_i" do cases = [ {value: "一", expected: 1}, {value: "二", expected: 2}, {value: "三", expected: 3}, {value: "四", expected: 4}, {value: "五", expected: 5}, {value: "六", expected: 6}, {value: "七", expected: 7}, {value: "八", expected: 8}, {value: "九", expected: 9}, {value: "十", expected: 10}, {value: "1", expected: "1"}, {value: "", expected: ""}, ] cases.each do |c| it "kansuji #{c[:value]} is number #{c[:expected]}" do ret = c[:value].kansuji_to_i expect(ret).to eq(c[:expected]) end end end describe "+" do cases = [ {value: "一", addition: "一", expected: 2}, {value: "二", addition: "一", expected: 3}, {value: "三", addition: "一", expected: 4}, {value: "四", addition: "一", expected: 5}, {value: "五", addition: "一", expected: 6}, {value: "六", addition: "一", expected: 7}, {value: "七", addition: "一", expected: 8}, {value: "八", addition: "一", expected: 9}, {value: "九", addition: "一", expected: 10}, {value: "十", addition: "一", expected: 11}, {value: "1", addition: "一", expected: "1一"}, {value: "", addition: "一", expected: "一"}, ] cases.each do |c| it "kansuji #{c[:value]} + kansuji #{c[:addition]} is number #{c[:expected]}" do ret = c[:value] + c[:addition] expect(ret).to eq(c[:expected]) end end end end
テスト結果
$ rspec .................................... Finished in 0.006 seconds 36 examples, 0 failures