SE_BOKUのまとめノート的ブログ

SE_BOKUが知ってること・勉強したこと・考えたことetc

STS3+SpringBootプロジェクトでJUNIT4を使った単体テストをする。

String Bootで簡単なクラスを作って、JUNIT単体テストまでやってみます。 

なお、STS3(3.9.6)+SpringBoot2.0+tymeleaf3.0迄動作確認しています。

f:id:arakan_no_boku:20190222012501j:plain

 

想定するフォルダ階層

 

今回は、以下のようなフォルダ階層でソースを分類しています。

f:id:arakan_no_boku:20170219141729j:plain

 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」にしていますが、名前はわかりやすければ良いです。テスト元クラスの指定だけは間違いなきよう。

f:id:arakan_no_boku:20170221194742j:plain

 次へボタンを押して、元クラスのテストしたいメソッドにチェックをつけて、完了します。

f:id:arakan_no_boku:20170221195144j:plain

 

テストケースは、サンプルなので、インスタンスを生成して、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がロードされて、単体テストの中で機能が使えるようになります。

f:id:arakan_no_boku:20180303130554j:plain

 

JUNITを実行する

 

JUNITの実行は、右クリックメニューの実行>JUNITテストで行います。 

src/test/java か、その下のパッケージを選んで右クリックメニューを表示しないと、JUNITテストが選択肢としてでてこない場合があるので注意です。

f:id:arakan_no_boku:20170221200310j:plain

 SpringBootの機能をつかう場合はロードに、ちょっと時間がかかります。 

うまくいくと、おなじみのグリーンバーがでてきます。 

f:id:arakan_no_boku:20170221211954j:plain

これで、とりあえず単体テストができることは確認できました。 

ちなみに、ここで使っているのは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 関連記事

 

入力画面に関連する記事

画像をSUBMITボタン代わりに使う

ラジオボタンとラジオボタングループを使う 

ラジオボタンとラジオボタングループを使う 

チェックボックスを使う。 

HTMLのタグの閉じ忘れで例外が発生する!

プルダウンリストとマルチセレクトボックスを使う。

今度はテキストエリアで複数行入力する。 

テキストボックスの入力と基本的なチェックを使う。

 

参照画面・画面遷移に関連する記事

参照画面:テーブルを使い、行毎に色分けした一覧表を表示する。 

参照画面:条件に一致した時のみHTML要素を出力する。

セッションを使って画面間で情報を受け渡す 

画面遷移:GET時のリクエストパラメータを受け取る 

日本語しか使わなくても、i18N対応はする意味がある。

 

入力チェックに関連する記事

入力チェック:未入力時に空文字が渡される仕様を回避する。 

入力チェック:@Patternと正規表現で独自チェックする。

入力チェック:アノテーション定義を自分で作る。(再利用版)

入力チェック用アノテーション定義を自分で作る。(独自実装版)

入力チェック:複数項目の相関チェックアノテーションの作り方

 

データアクセス・その他に関連する記事

データアクセス:Jprepositoryを使って簡単にCRUDする。 

データアクセス:ネイティブなSQL文を実行する 

クラスパス内の静的ファイルにアクセスする 

SpringBootだとログの書き出しも楽ちんです。 

SpringBootプロジェクトでJUNIT4を使った単体テストをする。