チュートリアル: テスト駆動開発
運用コードを作成する前にテストを作成する場合でも、後でテストを作成する場合でも、IntelliJ IDEA を使用すると、単体テストの作成と実行が簡単になります。 このチュートリアルでは、最初に IntelliJ IDEA を使用してテスト (テスト駆動開発または TDD(英語)) を作成する方法を示します。
プロジェクトの作成
新規プロジェクトを作成します
IntelliJ IDEA を起動してください。
'ようこそ' 画面が開いたら、「新規プロジェクト 」をクリックします。 それ以外の場合は、メインメニューの に移動します。
左側のリストから Java を選択します。
新しいプロジェクトに、例えば
MoodAnalyserという名前を付け、必要に応じてロケーションを変更します。ビルドツールとして Gradle を選択し、DSL として Groovy を選択します。
JDK リストから、プロジェクトで使用する JDK を選択します。
JDK がコンピューターにインストールされているが、IDE で定義されていない場合は、 JDK を追加 を選択し、JDK ホームディレクトリへのパスを指定します。
必要な JDK がコンピューターにない場合は、 JDK のダウンロード を選択します。
作成 をクリックします。
IntelliJ IDEA は、構成済みの構造と必須ライブラリを使用してプロジェクトを作成します。 JUnit 5 は、 build.gradle ファイルへの依存関係として追加されます。
新規パッケージの作成
プロジェクト ツールウィンドウで フォルダーを右クリックし、 を選択します。
新しいパッケージに
com.example.demoという名前を付け、 Enter を押します。
テストボディを書く
最初のテストを作成する
テストしているコードがまだ利用可能である必要はなく、最初にテストを作成していることを考えると、プロジェクトパネルを介して最初のテストを作成し、パッケージに配置します。
テストルートフォルダー
を右クリックし、 を選択します。
開いたポップアップで、新しいパッケージとテストクラスに
com.example.demo.MoodAnalyserTestという名前を付けます。
クラスの波括弧内にキャレットを置き、 Alt+Insert を押します。
メニューから テストメソッド を選択して、デフォルトテンプレートからテストメソッドを作成します。
メソッドに
testMoodAnalysisという名前を付け、 Enter を押すと、キャレットがメソッド本体に配置されます。
デフォルトのテストメソッドテンプレートを変更できます。たとえば、メソッド名の先頭を
testからshouldに変更する場合などです。
テストから新しいクラスを作成する
存在しないクラスやメソッドのテストコードを書くのは直感的ではないように思えるかもしれませんが、IntelliJ IDEA はコンパイラーをエラーがない状態に保ちながらこれを簡単にします。 まだ存在していない場合、IntelliJ IDEA はクラスとメソッドを作成できます。
new MoodAnalyserを入力し、 Alt+Enter を押して、 クラス「MoodAnalyser」を作成する を選択します。
開いたダイアログで、 main | java フォルダー内の
com.example.demoパッケージを選択し、 OK をクリックします。
変数の作成
通常どおり、IntelliJ IDEA の リファクタリングツールを使用して結果を格納する変数を作成できます。IntelliJ IDEA は、正しいライブラリがクラスパスにある場合に最適なクラスをインポートします。
テストクラスに戻り、カーソルを
new MoodAnalyserの後に置き、()と入力して Ctrl+Alt+V を押し、 変数の抽出/導入リファクタリングを呼び出します。新しい変数に
moodAnalyserという名前を付けます。
テストボディを完成させる
存在しない必要なメソッドの名前を含め、テスト本体の記述を続けます。
テストクラスで、次のステートメントを入力します。
moodAnalyser.analyseMood("This is a sad message");analyseMoodは未解決の参照としてマークされます。analyseMoodにキャレットを置き、 Alt+Enter を押して、 'MoodAnalyser' にメソッド 'analyseMood' を作成する をクリックします。
MoodAnalyserクラスが次のようになっていることを確認してください。public class MoodAnalyser { public String analyseMood(String message) { return null; } }
テストクラス内で、
analyseMoodにキャレットを置き、 Ctrl+Alt+V を押して、moodを入力します。
アサーションステートメントを追加する
build.gradle ファイルを開き、次の依存関係を追加し、
をクリックして変更をインポートします。
dependencies { testImplementation( 'org.hamcrest:hamcrest-library:2.2' ) }MoodAnalyserTest に、次のステートメントを追加します。
assertThat(mood, CoreMatchers.is("SAD"));Alt+Enter を押して、不足しているメソッドとクラスをインポートします。
コード
この時点で、テストクラスと本番クラスは次のようになります。
テストを実行する
TDD アプローチに従うと、通常は Red-Green-Refactor(英語) のサイクルを経ます。 テストを実行し、失敗したら(赤に)、テストをパスするための最も簡単なコードを実装し(緑に)、コードをリファクタリングしてテストが緑色になり、コードが十分にクリーンになるようにします。
このサイクルの最初のステップは、テストを実行して失敗することを確認することです。
IntelliJ IDEA 機能を使用して、テストしているメソッドの最も単純な空の実装を作成したことを考えると、テストに合格することは期待できません。
テストの内部から Ctrl+Shift+F10 を押して、この個々のテストを実行します。
結果は 実行ツールウィンドウに表示されます。 テスト名の横にアイコンが表示されます。例外の場合は赤色、失敗したアサーションの場合は黄色となります。 どちらの型の失敗でも、何が問題だったのかを示すメッセージが表示されます。

コードを実装する
次のステップは、テストをパスすることです。これは動作する最も簡単なものを実装することを意味します。 TDD では、最もシンプルに動作させる方法として、期待する値をハードコーディングすることがよくあります。 このプロセスを繰り返すことで、より現実的な本番コードへと発展していく様子は後ほど説明します。
テストを修正する
MoodAnalyser で、
nullをSADの戻り値return "SAD";に置き換えます。Shift+F10 を使用して最後のテストを再実行して、テストを再実行します。
テストパスを参照してください。テストメソッドの横にあるアイコンが緑色になります。

イテレート
コードの開発は反復的なプロセスです。 TDD スタイルのアプローチに従えば、これは真実です。 より複雑な振る舞いを追い出すために、他のケースのテストを追加します。
2 番目のテストケースを追加する
テストクラスで、 Alt+Insert を再度使用して、新しいテストメソッドを作成します。
HappyMoodsという名前を付けます。次のコードをクラスに追加します。
@Test void HappyMoods() { MoodAnalyser moodAnalyser = new MoodAnalyser(); String mood = moodAnalyser.analyseMood("This is a happy message"); assertThat(mood, CoreMatchers.is("HAPPY")); }
Alt+Shift+R を押してこの 2 番目のテストケースを実行すると、失敗することがわかります。

2 番目のテストを修正する
このテストに合格するには、テスト対象のメソッドのコードを変更します。
package com.example.demo; public class MoodAnalyser { public String analyseMood(String message) { if (message.contains(("sad"))) { return "SAD"; } else { return "HAPPY"; } } }テストクラス内で Ctrl+Shift+F10 を押し、両方のテストを再実行します(単一のメソッド内ではなく)。すると、どちらのテストもパスしていることが確認できます。

要約
テストファーストスタイルで最初のテストを作成するには、テストクラスを作成し、テストメソッドを作成して、最終的に製品コードとなるコードの空の実装を作成するという、少量のセットアップが必要です。 IntelliJ IDEA は、この初期設定の多くを自動化します。
プロセスを繰り返し、テストを作成し、それらのテストに合格するために必要な変更を加えると、必要な機能と、これらの要件を満たす最も簡単なソリューションの包括的なテストスイートが構築されます。