この記事は公開されてから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らしいと思いました。何かの役に立てば幸いです。