Crystal標準specとspec2 libraryで書いたテストの比較をします
対象コード
FizzBuzzです
require "./sample_test/*"
module SampleTest
class FizzBuzz
def initialize(@limit : Int32)
end
def fizzbuzz
ary = Array(String).new
@limit.times {|i|
i+=1
ary << case
when i%15==0 then "FizzBuzz"
when i%5==0 then "Buzz"
when i%3==0 then "Fizz"
else i.to_s
end
}
ary
end
end
end
spec
標準の spec によるテストです。
成功するテストと失敗するテストを1ケースずつ用意しています。
テストコード
require "./spec_helper"
describe SampleTest do
describe SampleTest::FizzBuzz do
describe "fizzbuzz1" do
it "valid" do
actual = SampleTest::FizzBuzz.new(15).fizzbuzz
actual.should eq(["1", "2", "Fizz", "4", "Buzz", "Fizz", "7", "8", "Fizz", "Buzz", "11", "Fizz", "13", "14", "FizzBuzz"])
end
it "invalid" do
actual = SampleTest::FizzBuzz.new(16).fizzbuzz
actual.should eq(["1", "2", "Fizz", "4", "Buzz", "Fizz", "7", "8", "Fizz", "Buzz", "11", "Fizz", "13", "14", "FizzBuzz", "Fizz"])
end
end
end
end
実行結果
crystal spec
.F
Failures:
1) SampleTest SampleTest::FizzBuzz fizzbuzz1 invalid
Failure/Error: actual.should eq(["1", "2", "Fizz", "4", "Buzz", "Fizz", "7", "8", "Fizz", "Buzz", "11", "Fizz", "13", "14", "FizzBuzz", "Fizz"])
expected: ["1", "2", "Fizz", "4", "Buzz", "Fizz", "7", "8", "Fizz", "Buzz", "11", "Fizz", "13", "14", "FizzBuzz", "Fizz"]
got: ["1", "2", "Fizz", "4", "Buzz", "Fizz", "7", "8", "Fizz", "Buzz", "11", "Fizz", "13", "14", "FizzBuzz", "16"]
# ./spec/sample_test_spec.cr:13
Finished in 0.74 milliseconds
2 examples, 1 failures, 0 errors, 0 pending
Failed examples:
spec2
spec2 libraryによるテストです。
成功するテストと失敗するテストを1ケースずつ用意しています。
spec2 は spec に加えて
- let / subject の追加
- expect 記法
- before / after の追加
などがあります。
テストコード
require "./spec_helper"
Spec2.describe SampleTestSpec2 do
describe SampleTestSpec2::FizzBuzz do
subject { SampleTestSpec2::FizzBuzz }
let (base_array) {
["1", "2", "Fizz", "4", "Buzz", "Fizz", "7", "8", "Fizz", "Buzz", "11", "Fizz", "13", "14", "FizzBuzz"]
}
describe "fizzbuzz1" do
it "valid" do
actual = subject.new(15).fizzbuzz
expect(base_array).to eq(actual)
end
it "invalid" do
actual = subject.new(16).fizzbuzz
base_array << "Fizz"
expect(base_array).to eq(actual)
end
end
end
end
spec_helper
require "spec"
require "spec2"
require "../src/sample_test_spec2"
実行結果
$ crystal spec
.F
In example: SampleTestSpec2 SampleTestSpec2::FizzBuzz fizzbuzz1 invalid
Failure: Expected to be equal:
Expected: ["1", "2", "Fizz", "4", "Buzz", "Fizz", "7", "8", "Fizz", "Buzz", "11", "Fizz", "13", "14", "FizzBuzz", "16"]
Actual: ["1", "2", "Fizz", "4", "Buzz", "Fizz", "7", "8", "Fizz", "Buzz", "11", "Fizz", "13", "14", "FizzBuzz", "Fizz"]
テスト関連ライブラリ備忘録
power_assert
Crystal にも power_assert library があるのだが、 Crystal version 0.16.0 の変更によって
現在(2016/05/26)は動作しなくなっている。
version 0.15 系では動作します。
http://qiita.com/rosylilly/items/4c1e120ee9b82c2ed250
https://github.com/rosylilly/power_assert.cr