Ruby
minitest
プロを目指す人のためのRuby入門

はじめに

この記事は書籍「プロを目指す人のためのRuby入門」に掲載できなかったトピックを著者自らが紹介するアドベントカレンダーの5日目です。
本文に出てくる章番号や項番号は書籍の中で使われている番号です。

今回はMinitestで特定のテストをスキップする方法を説明します。

必要な前提知識

「プロを目指す人のためのRuby入門」の第3章まで読み終わっていること。

Minitestで特定のテストをスキップする方法

使用頻度はあまり高くないと思いますが、何らかの理由で対応を後回しにしたい場合はテストの実行を途中で停止してスキップすることができます。テストをスキップする場合は次のようにskipメソッドを使います。

def test_sample
  skip '以下の問題はあとで修正する'
  assert_equal 'RUBY', nil.upcase
end

これを実行すると次のような結果になります。

$ ruby sample_test.rb
Run options: --seed 42317

# Running:

S

Finished in 0.000945s, 1058.4788 runs/s, 0.0000 assertions/s.

1 runs, 0 assertions, 0 failures, 0 errors, 1 skips

You have skipped tests. Run with --verbose for details.

テストの進捗状況はスキップ(Skip)を表すSが表示されます。実行結果のまとめでも1 skipsのようにスキップされたテストの件数が表示されています。

最後の1行には英語で「スキップされたテストがあります。--verboseオプションを付けて実行すると詳細が表示されます」という文言が書いてあります。このメッセージに従って、--verbose(冗長の意)オプションを付けて実行してみましょう。

$ ruby sample_test.rb --verbose
Run options: --verbose --seed 1520

# Running:

SampleTest#test_sample = 0.00 s = S

Finished in 0.001041s, 960.6333 runs/s, 0.0000 assertions/s.

  1) Skipped:
SampleTest#test_sample [sample_test.rb:6]:
以下の問題はあとで修正する

1 runs, 0 assertions, 0 failures, 0 errors, 1 skips

--verboseオプション付きで実行すると、スキップされたテストの場所とskipメソッドに渡したメッセージが表示されるようになります。(進捗状況の表示内容も変わっていますね)

テストがスキップされるとそのテストメソッドの実行はそこで終わります。実行対象のテストクラスやテストメソッドが複数あった場合は次のテストクラスやテストメソッドの実行に移ります。

とはいえ、skipメソッドを多用しすぎると、スキップされるテストだらけになってほとんど何もテストできていない、ということも起こりえるので、「どうしても」という状況以外では使用しないようにしましょう。

次回予告

次回はテストメソッドの粒度について説明します。