cleancodersの動画を見ていて気がついた、TDDに便利なIntelliJ IDEAの機能を5つご紹介します。
1. Live Template
TDDでは沢山のテストメソッドを書きます。毎回、「public void test ...」なんてタイプするのは面倒です。
そんなときに便利なのがLive Templateです。
例えば「test」と入力して「tab」を押します。
するとテストメソッドの雛形に変換されます。
「test」はデフォルトでは登録されていないので自分でIDEに登録する必要があります。
Preferences / Editor / Live Templates / otherで「+」ボタンを押します。下の画像を参考に必要な情報を入力してください。個人的にハマったのは一番下の「Applicable in」を選択し忘れたことです。
2. Show Context Actions
TDDでは存在しないクラスやメソッドをテストクラスで利用します。
例えば下のテストメソッドの例ではMyClassクラスがないのでIDEが赤字で警告を発しています。
MyClassを作成してMyClass#executeを実装する必要があります。このとき便利なのがShow Context Actionsです。
警告が出ているMyClassにカーソルを合わせてoption + Enterと押すとエラーを解消するための選択肢が表示されます。「Create class 'MyClass'」を選べば簡単にMyClassクラスが作成できます。
同様に、executeメソッドにカーソルを合わせてoption + Enterから「Create method 'execute' in 'MyClass'」を選択すればMyClassクラスにexecuteメソッドのひな形を作ってくれます。
勿論、普通にMyClass.javaファイルを作成してMyClassクラスとexecuteメソッドを書くこともできます。でも書いたテストメソッドから直接、option + Enterで次の作業に移動する方がTDDとしてリズムがよいと感じます。
3. テストの再実行
TDDでは頻繁にテストを実行します。その度にマウス操作していてはリズムが悪くなります。
Ctrl + rで前回実行したテストを再実行できます。
4. Introduce Field
複数のテストを記述していく中でテスト間で重複処理が発生します。こうした部分はsetUpなどに移して重複を排除します。
TDDでは先にRefactorしてはいけないので重複が発生するとわかっていても最初からsetUpを書くことはできません。このため発生した重複をsetUpへ移す作業は頻繁に発生します。
変数をフィールドにしてsetUpに移すときに便利なのが「Introduce Field」。option + Command + Fです。
右クリック、Refactorからもできますが頻繁に発生するのでショートカットの方が断然、効率がよいです。
5. Run with Coverage
ある程度、実装が進むと気になるのがCoverageです。テストクラスを右クリックして「Run <テストクラス> with Coverage」を選択することで簡単に確認することができます。
テストが完了するとCoverageが以下のようにクラス名の隣に表示されます。StackクラスはInterfaceなのでCoverageが表示されません。BoundStackクラスのCoverageは低いですね。
カバーされなかったコードを確認してみましょう。エディタでBoundStackクラスを開くとカバーされた行は緑、カバーされなかった行は赤が表示されます。
リファクタリングで作成したNull Objectのテストに漏れがあったことがわかりました。