Spring Bootでユニットテストを行う

2016.04.25

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

タイトル通り、Spring Bootを使ったアプリでのユニットテストについてです。Beanとして使う様なSpringの機能を使用したクラスのユニットテストを書く際に、何が必要なのかについて書きます。単純なPOJOのような(つまりSpringの機能を使わない)クラスは純粋のJUnitの書き方で大丈夫なので、本エントリの内容は当てはまりません。

テストの実装

ではテストの書き方についてです。先に結論を書いてしまうと

  • @RunWith
  • @SpringApplicationConfiguration

のアノテーションを使用することがポイントとなります。

テストの実例と解説

以下、テストの実例です。

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(Application.class)
public class ConfigReaderTest {
    @Test
    public void testXXXX(){
        //なんらかのJUnitのテスト
    }

先に書いた2つのアノテーションをテストクラスに付けていることが分かります。

「@RunWith」では引数に「SpringJUnit4ClassRunner.class」を指定しています。この記述については、Spring Bootでユニットテストを行う際の「お約束」だと考えておけばいいかと思います。

「@SpringApplicationConfiguration」は引数に「Application.class」を指定していますが、このクラスはアプリによって異なってきます。その理由は、このクラスにはApplicationContextとして指定したクラスを記述する必要があるためです。多くの場合、mainを記述したクラスに以下の様にApplicationContextを指定するかと思います(Webアプリとコンソールアプリとでは微妙に違うかもしれませんが)。

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        ApplicationContext ctx = SpringApplication.run(Application.class, args);
        // (以降略)
    }
}

Building an Application with Spring Bootより抜粋

まとめ

以上で、Spring Bootでユニットテストを実行することができます。テストの構文などはJUnitと同じなようです。JUnitにアノテーションを追加することでSpringのテストを可能とするところが、Spring Bootらしいと思いました。何かの役に立てば幸いです。

参考サイト

40. Testing