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

## はじめに
この記事では「[プロを目指す人のためのRuby入門](http://gihyo.jp/book/2017/978-4-7741-9397-7)」の読者向けに、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を指定します。

![Screen Shot 2018-06-13 at 12.29.57.png](https://qiita-image-store.s3.amazonaws.com/0/7465/8c7d2baf-01e6-ba3f-3867-39987d125455.png)

### 2. testディレクトリを作成する

「Projectペインを右クリック > New > Directory」で`test`という名前のディレクトリを作成します。

![Screen Shot 2018-06-13 at 12.33.33.png](https://qiita-image-store.s3.amazonaws.com/0/7465/a9e3194e-9db3-9273-fb26-2f722afa19b9.png)

ちなみに必須ではありませんが、`test`ディレクトリを作ったら、「右クリック > Mark Directory as > Test Sources Root」としておくと、フォルダ（ディレクトリ）が緑色になって他のフォルダと識別しやすくなります。

![Screen Shot 2018-06-13 at 12.35.35.png](https://qiita-image-store.s3.amazonaws.com/0/7465/608e7d39-ea86-b898-80e9-e04aa1ecc7d6.png)

### 3. テストファイルを作成する

「`test`ディレクトリを右クリック > New > Ruby Class」で`SampleTest`というクラスを作成します。

![Screen Shot 2018-06-13 at 12.38.57.png](https://qiita-image-store.s3.amazonaws.com/0/7465/dd14a285-d8dd-7cd0-6fce-ca7bef2e2b01.png)

作成されたファイルの中身を以下のように書き換えます。

```ruby
require 'minitest/autorun'

class SampleTest < Minitest::Test
  def test_sample
    assert_equal 'RUBY', 'ruby'.upcase
  end
end
```

`minitest/autorun`が見つからない、というエラーが出た場合は、Preferencesを開き、プロジェクトの"Ruby SDK and Gems"を確認してください。

![Screen Shot 2018-06-13 at 12.41.17.png](https://qiita-image-store.s3.amazonaws.com/0/7465/50309d53-967b-b25d-efb2-523d590a1f7a.png)

### 4. テストを実行してみる
「`sample_test.rb`を右クリック > "Run 'Run test 'sample_tes...'"」を選択し、テストを実行してください。

![Screen Shot 2018-06-13 at 12.44.56.png](https://qiita-image-store.s3.amazonaws.com/0/7465/1f4ac85b-02c7-4b5d-2782-46e08c3bf910.png)

うまくいけば、下のように"All Tests Passed"の表示が出るはずです。

![Screen Shot 2018-06-13 at 12.46.12.png](https://qiita-image-store.s3.amazonaws.com/0/7465/4a72d2bb-8239-4981-05c7-1dac7914d04a.png)

### 5. FizzBuzzプログラムをテストしてみる

プログラム本体とテストコードが分かれているケースもテストしてみましょう。「[プロを目指す人のためのRuby入門](http://gihyo.jp/book/2017/978-4-7741-9397-7)」の3.3.2項を参考にして、`lib`ディレクトリに`fizz_buzz.rb`を、`test`ディレクトリに`fizz_buzz_test.rb`をそれぞれ作成します。

```ruby: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
```

```ruby: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上では以下のように見えるはずです。

![Screen Shot 2018-06-13 at 12.54.38.png](https://qiita-image-store.s3.amazonaws.com/0/7465/c0bfa4c2-80ce-06cf-098c-ea2feab246a4.png)

「`fizz_buzz_test.rb`を右クリック > "Run 'Run test 'fizz_buzz_...'"」を選択し、テストを実行してください。

下のように"All Tests Passed"の表示が出れば成功です。

![Screen Shot 2018-06-13 at 12.55.46.png](https://qiita-image-store.s3.amazonaws.com/0/7465/ba1c226a-9056-4107-302d-af054d95c6b8.png)

## 応用

### デバッグ実行してみる

RubyMineを使えば、簡単にデバッグ実行することができます（デバッグ実行については「[プロを目指す人のためのRuby入門](http://gihyo.jp/book/2017/978-4-7741-9397-7)」の第11章で紹介しています）。

デバッグ実行をする場合、コードを止めたい行をクリックし、ブレークポイントを設定します。
たとえば、以下の例では`fizz_buzz.rb`の2行目にブレークポイントを設定しています。

![Screen Shot 2018-06-13 at 13.01.57.png](https://qiita-image-store.s3.amazonaws.com/0/7465/78abf9ef-d36e-7057-376a-ba032dc76fcb.png)

ブレークポイントを付けたら、「`fizz_buzz_test.rb`を右クリック > "Debug 'Run test 'fizz_buzz_...'"」を選択して、テストを実行します。

![Screen Shot 2018-06-13 at 13.03.27.png](https://qiita-image-store.s3.amazonaws.com/0/7465/2648f30f-08e0-7dc4-76db-ab16b7a082e1.png)

デバッグに必要なgemが不足している場合は以下のようなダイアログが表示されるので、Yesを選択してください。

![Screen Shot 2018-06-13 at 12.57.50.png](https://qiita-image-store.s3.amazonaws.com/0/7465/1af6bba5-dbe6-de29-a531-008b00480616.png)

gemがインストールされると、次のようにブレークポイントを設定した場所でプログラムの実行が停止します。

![Screen Shot 2018-06-13 at 12.58.27.png](https://qiita-image-store.s3.amazonaws.com/0/7465/db7b8265-7286-acfc-91f0-141b783d3f91.png)

ステップ実行のためのコマンド（ステップオーバーやステップイン、ステップアウト）は以下のアイコンで表示されます。

![Screen Shot 2018-06-13 at 13.07.56.png](https://qiita-image-store.s3.amazonaws.com/0/7465/3e8e08f1-c63d-bcbe-85c4-1ea00354d6a0.png)

Interactive consoleを使うと、変数の値やメソッドの戻り値を確認することができます。

![Screen Shot 2018-06-13 at 13.10.07.png](https://qiita-image-store.s3.amazonaws.com/0/7465/4e2bff2d-0040-9892-5b4d-19f138ec6173.png)

RubyMineのデバッグ機能は非常に多機能なので、詳しい説明は以下のヘルプページを参考にしてください。

[デバッグ \- 公式ヘルプ \| RubyMine](https://pleiades.io/help/ruby/debugging-code.html)

## まとめ

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