はじめに
この記事では「プロを目指す人のためのRuby入門」の読者向けに、Minitestで書いたテストコードをRubyMine上で実行する手順を紹介します。
実行環境
この記事は以下の環境で動作確認しています。
- Ruby 2.4.1 (rbenvで新規にインストールした直後の状態)
- RubyMine 2018.1.3
- macOS 10.13.4
手順
1. RubyMineで新規プロジェクトを作成する
プロジェクトタイプはEmpty Projectで、Ruby SDKにRuby 2.4.1を指定します。
2. testディレクトリを作成する
「Projectペインを右クリック > New > Directory」でtest
という名前のディレクトリを作成します。
ちなみに必須ではありませんが、test
ディレクトリを作ったら、「右クリック > Mark Directory as > Test Sources Root」としておくと、フォルダ(ディレクトリ)が緑色になって他のフォルダと識別しやすくなります。
3. テストファイルを作成する
「test
ディレクトリを右クリック > New > Ruby Class」でSampleTest
というクラスを作成します。
作成されたファイルの中身を以下のように書き換えます。
require 'minitest/autorun'
class SampleTest < Minitest::Test
def test_sample
assert_equal 'RUBY', 'ruby'.upcase
end
end
minitest/autorun
が見つからない、というエラーが出た場合は、Preferencesを開き、プロジェクトの"Ruby SDK and Gems"を確認してください。
4. テストを実行してみる
「sample_test.rb
を右クリック > "Run 'Run test 'sample_tes...'"」を選択し、テストを実行してください。
うまくいけば、下のように"All Tests Passed"の表示が出るはずです。
5. FizzBuzzプログラムをテストしてみる
プログラム本体とテストコードが分かれているケースもテストしてみましょう。「プロを目指す人のためのRuby入門」の3.3.2項を参考にして、lib
ディレクトリにfizz_buzz.rb
を、test
ディレクトリにfizz_buzz_test.rb
をそれぞれ作成します。
def fizz_buzz(n)
if n % 15 == 0
'Fizz Buzz'
elsif n % 3 == 0
'Fizz'
elsif n % 5 == 0
'Buzz'
else
n.to_s
end
end
require 'minitest/autorun'
require './lib/fizz_buzz'
class FizzBuzzTest < Minitest::Test
def test_fizz_buzz
assert_equal '1', fizz_buzz(1)
assert_equal '2', fizz_buzz(2)
assert_equal 'Fizz', fizz_buzz(3)
assert_equal '4', fizz_buzz(4)
assert_equal 'Buzz', fizz_buzz(5)
assert_equal 'Fizz', fizz_buzz(6)
assert_equal 'Fizz Buzz', fizz_buzz(15)
end
end
RubyMine上では以下のように見えるはずです。
「fizz_buzz_test.rb
を右クリック > "Run 'Run test 'fizz_buzz_...'"」を選択し、テストを実行してください。
下のように"All Tests Passed"の表示が出れば成功です。
応用
デバッグ実行してみる
RubyMineを使えば、簡単にデバッグ実行することができます(デバッグ実行については「プロを目指す人のためのRuby入門」の第11章で紹介しています)。
デバッグ実行をする場合、コードを止めたい行をクリックし、ブレークポイントを設定します。
たとえば、以下の例ではfizz_buzz.rb
の2行目にブレークポイントを設定しています。
ブレークポイントを付けたら、「fizz_buzz_test.rb
を右クリック > "Debug 'Run test 'fizz_buzz_...'"」を選択して、テストを実行します。
デバッグに必要なgemが不足している場合は以下のようなダイアログが表示されるので、Yesを選択してください。
gemがインストールされると、次のようにブレークポイントを設定した場所でプログラムの実行が停止します。
ステップ実行のためのコマンド(ステップオーバーやステップイン、ステップアウト)は以下のアイコンで表示されます。
Interactive consoleを使うと、変数の値やメソッドの戻り値を確認することができます。
RubyMineのデバッグ機能は非常に多機能なので、詳しい説明は以下のヘルプページを参考にしてください。
まとめ
この記事では「プロを目指す人のためのRuby入門」の読者向けに、、Minitestで書いたテストコードをRubyMine上で実行する手順を紹介しました。
RubyMineは有料のIDEですが、うまく使えばRuby初心者の方が効率良くRubyを習得するための強力なツールになります。
ぜひRubyMineの導入を検討してみてください。