CrystalでParameterizedテストをする際のイディオムについてまとめます。
サンプル
※以下のコードは Crystal の作者である Ary Borenszweig さんにコメントにて指摘していただき、
修正していただいたバージョンです。Ary Borenszweig さんありがとうございます
require "spec"
module FizzBuzz
extend self
def fizzbuzz(limit)
(1..limit).each_with_object([] of String) do |e, memo|
memo << case
when e % 15 == 0 then "FizzBuzz"
when e % 5 == 0 then "Buzz"
when e % 3 == 0 then "Fizz"
else e.to_s
end
end
end
end
def assert_fizzbuzz(kace, limit, expected)
it kace do
actual = FizzBuzz.fizzbuzz(limit)
actual.should eq(expected)
end
end
module FizzBuzz::Test
describe "fizzbuzz" do
assert_fizzbuzz "Fizz only", 3, ["1", "2", "Fizz"]
assert_fizzbuzz "Fizz, Buzz", 5, ["1", "2", "Fizz", "4", "Buzz"]
assert_fizzbuzz "Fizz, Buzz, FizzBuzz", 15, ["1", "2", "Fizz", "4", "Buzz", "Fizz", "7", "8", "Fizz", "Buzz", "11", "Fizz", "13", "14", "FizzBuzz"]
end
end
実行
$ crystal spec
...
Finished in 0.63 milliseconds
3 examples, 0 failures, 0 errors, 0 pending
Snippet
atom_crystal_snippet という Atom の Snippet を公開しています。
この Snippet に Parameterized テストをする際のイディオムを追加しました。