プログラミング初心者がアーキテクトっぽく語る

見苦しい記事も多数あるとは思いますが訂正しつつブログと共に成長していければと思います

TDDで役立つIntelliJ IDEA機能

cleancodersの動画を見ていて気がついた、TDDに便利なIntelliJ IDEAの機能を5つご紹介します。


1. Live Template

TDDでは沢山のテストメソッドを書きます。毎回、「public void test ...」なんてタイプするのは面倒です。

そんなときに便利なのがLive Templateです。

例えば「test」と入力して「tab」を押します。

f:id:hogehoge666:20210105224304p:plain

するとテストメソッドの雛形に変換されます。

f:id:hogehoge666:20210105224319p:plain

「test」はデフォルトでは登録されていないので自分でIDEに登録する必要があります。

Preferences / Editor / Live Templates / otherで「+」ボタンを押します。下の画像を参考に必要な情報を入力してください。個人的にハマったのは一番下の「Applicable in」を選択し忘れたことです。

f:id:hogehoge666:20210105224335p:plain


2. Show Context Actions

TDDでは存在しないクラスやメソッドをテストクラスで利用します。

例えば下のテストメソッドの例ではMyClassクラスがないのでIDEが赤字で警告を発しています。

f:id:hogehoge666:20210105224419p:plain

MyClassを作成してMyClass#executeを実装する必要があります。このとき便利なのがShow Context Actionsです。

警告が出ているMyClassにカーソルを合わせてoption + Enterと押すとエラーを解消するための選択肢が表示されます。「Create class 'MyClass'」を選べば簡単にMyClassクラスが作成できます。

f:id:hogehoge666:20210105224638p:plain

同様に、executeメソッドにカーソルを合わせてoption + Enterから「Create method 'execute' in 'MyClass'」を選択すればMyClassクラスにexecuteメソッドのひな形を作ってくれます。

f:id:hogehoge666:20210105224705p:plain

勿論、普通に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です。

f:id:hogehoge666:20210325114938p:plain

右クリック、Refactorからもできますが頻繁に発生するのでショートカットの方が断然、効率がよいです。


5. Run with Coverage

ある程度、実装が進むと気になるのがCoverageです。テストクラスを右クリックして「Run <テストクラス> with Coverage」を選択することで簡単に確認することができます。

f:id:hogehoge666:20210105230610p:plain

テストが完了するとCoverageが以下のようにクラス名の隣に表示されます。StackクラスはInterfaceなのでCoverageが表示されません。BoundStackクラスのCoverageは低いですね。

f:id:hogehoge666:20210105224926p:plain

カバーされなかったコードを確認してみましょう。エディタでBoundStackクラスを開くとカバーされた行は緑、カバーされなかった行は赤が表示されます。

f:id:hogehoge666:20210105225037p:plain

リファクタリングで作成したNull Objectのテストに漏れがあったことがわかりました。