Minitestで書いたテストコードをRubyMine上で実行する手順


はじめに

この記事では「プロを目指す人のための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をそれぞれ作成します。

lib/fizz_buzz.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
test/fizz_buzz_test.rb
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のデバッグ機能は非常に多機能なので、詳しい説明は以下のヘルプページを参考にしてください。

デバッグ - 公式ヘルプ | RubyMine

まとめ

この記事では「プロを目指す人のためのRuby入門」の読者向けに、、Minitestで書いたテストコードをRubyMine上で実行する手順を紹介しました。
RubyMineは有料のIDEですが、うまく使えばRuby初心者の方が効率良くRubyを習得するための強力なツールになります。
ぜひRubyMineの導入を検討してみてください。