String Bootで簡単なクラスを作って、JUNITで単体テストまでやってみます。
なお、STS3(3.9.6)+SpringBoot2.0+tymeleaf3.0迄動作確認しています。
想定するフォルダ階層
今回は、以下のようなフォルダ階層でソースを分類しています。
SpringBootでは、必ずこの階層・名前でという縛りはないようです。
一応、本やネットのサンプルを参考にしてますが、コントローラクラスを「web」、エンティティクラスを「domain」にしている例もよく見かけます。
どっちにするか迷ったのですが、自分が慣れていて、わかりやすい名前を選んでます。
ちなみに、srcフォルダの、src/main/javaとsrc/test/javaの2つのフォルダの下は同じパッケージ構成にしておくと、junitを使って単体テストする時に楽です。
まず、SpringBootの機能を使わないクラスのテスト
テスト対象のクラスは、src/main/javaの下に作ります。
とりあえず、パッケージは「jp.bdemo.utils」にします。
これをテストするクラスは、src/test/javaの下にできます。
テスト対象は、Mapインスタンスを生成するユーティリティクラスを作ります。
Map<String,String> hoge = new HashMap<String,String>(); みたいに、<String,String>と2回書かないといけないのを、Map<String,String> hoge = NewManager.newMap(); みたいに書けるようにするクラスです。
public final class NewManager {
public static <T, K> Map<T, K> newMap() {
return new HashMap<T, K>();
}
}
今度は、src/test/javaの下にテスト用のクラスを作ります。
新規>JUNITテストケースを選び、ダイアログに必要項目を入力します。
JUNITのバージョンは、新規JUNIT4テストケースを選びます。
テスト対象のクラスが「NewManager」なので、テストクラスは「TestNewManager」にしていますが、名前はわかりやすければ良いです。テスト元クラスの指定だけは間違いなきよう。
次へボタンを押して、元クラスのテストしたいメソッドにチェックをつけて、完了します。
テストケースは、サンプルなので、インスタンスを生成して、NULLでないことだけチェックするだけにしときます。
@Test
public void testNewMap() {
Map<String,String> testMap = NewManager.newMap();
assertNotNull(testMap);
}
@Testアノテーションをテスト対象メソッドにつけます。
JUNIT4だと、@Testってアノテーションだけで、ちゃんとテストを認識してくれるので、ホント楽です。
SpringBootの機能を使う場合に必要なアノテーション
JPAの機能やDIなど、SpringBootの機能を使う場合は、クラスに以下のアノテーションをつけます。
@RunWith(SpringRunner.class)
@SpringBootTest
public class TestNewManager {・・・・
}
このアノテーションをつけることで、テストの実行時にSpringBootがロードされて、単体テストの中で機能が使えるようになります。
JUNITを実行する
JUNITの実行は、右クリックメニューの実行>JUNITテストで行います。
src/test/java か、その下のパッケージを選んで右クリックメニューを表示しないと、JUNITテストが選択肢としてでてこない場合があるので注意です。
SpringBootの機能をつかう場合はロードに、ちょっと時間がかかります。
うまくいくと、おなじみのグリーンバーがでてきます。
これで、とりあえず単体テストができることは確認できました。
ちなみに、ここで使っているのはSpring Tool Suite (STS)という開発環境です。
(Spring Tool Suite 3.8.3 で Spring Boot 1.5.1です)
2018/3/3追記
>現時点では、STS3.9.2、SpringBoot2.0.0 で動作確認してます。
STS(Spring Boot)+thymeleaf 関連記事
入力画面に関連する記事
参照画面・画面遷移に関連する記事
参照画面:テーブルを使い、行毎に色分けした一覧表を表示する。
入力チェックに関連する記事
入力チェック:@Patternと正規表現で独自チェックする。
入力チェック用アノテーション定義を自分で作る。(独自実装版)
データアクセス・その他に関連する記事