#19 Rubyで学ぶテスト(単体テスト)の基本
Rubyでメソッドを書いた後、それが正しく動くかをirbやputsで確認するだけで済ませていませんか?この記事では、Rubyで書いたコードを自動でチェックする「テスト」の基本を解説します。
なぜテストを書くのか
コードを修正するたびに、関連するメソッドが壊れていないかを手作業で確認するのは大変です。テストを用意しておけば、コマンド一つで動作確認ができ、安心してコードを直せるようになります。
RSpecを使ったテストの書き方
RubyではRSpecというテスト用ライブラリが定番です。gem install rspecで導入できます。
def add(a, b)
a + b
end
RSpec.describe "add" do
it "2と3を足すと5になる" do
expect(add(2, 3)).to eq(5)
end
end
describeでテストの対象をまとめ、itで個々のテストケースを書きます。expect(実際の値).to eq(期待値)という書き方で「等しいはず」を宣言します。ターミナルでrspecと実行すると結果が一覧表示されます。
異常系もテストしておく
正しい入力だけでなく、境界値(0やマイナスの値など)を渡した時の挙動もテストしておくと安心です。
it "0同士を足すと0になる" do
expect(add(0, 0)).to eq(0)
end
テスト前後の共通処理をまとめる
複数のテストで共通する準備・後片付けの処理は、before・afterを使ってまとめられます。
RSpec.describe "Calculator" do
before do
@calc = Calculator.new
end
it "初期値は0" do
expect(@calc.value).to eq(0)
end
end
各テストの前にbeforeの中身が実行されるため、同じ準備コードを毎回書く必要がなくなります。
Rubyならではの注意点
Rubyは柔軟な書き方ができる分、メソッドに想定外の型(文字列と数値を混ぜるなど)を渡してもすぐにはエラーにならないことがあります。RSpecのexpect { ... }.to raise_errorという書き方を使うと、「エラーが発生するはず」ということもテストできるので、異常な入力に対する挙動もあわせて確認しておくと安心です。
まとめ
テストは「正しく動くことを保証する仕組み」であり、安心してコードを修正するための土台になります。describeとit、expect、beforeの使い方から始めて、少しずつテストを増やしていきましょう。
関連記事
本ページはプロモーションを含みます。
参考書籍(PR)
Rubyをもっと学びたい方には「プロを目指す人のためのRuby入門[改訂2版]」がおすすめです。
PR
コードを書かずに自動化したい方へ
「学んだけど自分の作業に組み込む時間がない」という方向けに、ダブルクリックで動く Windows専用の自動化ツールをオーダーメイドで作成しています。気になる方は こちらをご覧ください。
コメント
コメントを投稿