Spring Boot 1.3.x の Web アプリを 1.4.x へバージョンアップする ( その17 )( テストクラスのモックを @MockBean + Mockito で作り直す2 )
概要
記事一覧はこちらです。
Spring Boot 1.3.x の Web アプリを 1.4.x へバージョンアップする ( その16 )( テストクラスのモックを @MockBean + Mockito で作り直す ) の続きです。
- 今回の手順で確認できるのは以下の内容です。
参照したサイト・書籍
目次
- LendingUserDetailsHelper.java の @Component アノテーションを付加して Bean にする
- LendingUserDetailsHelper を使用しているクラスを修正する
- BooklistServiceTest.java を修正する
- build.gradle から JMockit を外す
- 全てのテストを実行してみる
- 次回は。。。
手順
LendingUserDetailsHelper.java の @Component アノテーションを付加して Bean にする
LendingUserDetailsHelper を使用しているクラスを修正する
src/main/java/ksbysample/webapp/lending/security/LendingUserDetailsHelper.java の getLoginUserId メソッドにカーソルを移動して右クリックしてコンテキストメニューを表示した後、「Find Usages」を選択します。
画面下に使用箇所一覧が表示されますので、以下のように修正します。
- フィールド変数
private final LendingUserDetailsHelper lendingUserDetailsHelper;
を追加し、コンストラクタインジェクションの処理も追加します。ただしテストクラスの場合には@Autowired private LendingUserDetailsHelper lendingUserDetailsHelper;
を追加し、コンストラクタインジェクションにはしません。 - LendingUserDetailsHelper#getLoginUserId を呼び出している箇所の記述を
LendingUserDetailsHelper.getLoginUserId()
→lendingUserDetailsHelper.getLoginUserId()
に変更します。
修正したのは以下のソースです。
- src/main/java/ksbysample/webapp/lending/web/booklist/BooklistService.java
- src/main/java/ksbysample/webapp/lending/web/confirmresult/ConfirmresultController.java
- src/main/java/ksbysample/webapp/lending/web/lendingapproval/LendingapprovalService.java
- src/test/java/ksbysample/webapp/lending/security/LendingUserDetailsHelperTest.java
- フィールド変数
BooklistServiceTest.java を修正する
src/test/java/ksbysample/webapp/lending/web/booklist/BooklistServiceTest.java を リンク先の内容 に変更します。
BooklistServiceTest クラスのテストのみ実行し、成功することを確認します。
build.gradle から JMockit を外す
- build.gradle の dependencies から
testCompile("org.jmockit:jmockit:1.30")
を削除します。
全てのテストを実行してみる
まずは clean タスク → Rebuild Project → build タスクを実行して正常に終了することを確認します。
次に Project Tool Window の src/test から「Run ‘All Tests’ with Coverage」を実行して、全てのテストが成功することを確認します。
次回は。。。
今回のテストクラスの対応で 1.4 系へのバージョンアップの作業自体はほぼ終了ですが、他にやっておきたいものを書き上げてみました。やりたいものから進めてみます。
- Spring Boot のバージョンを 1.4.4 → 1.4.5 に上げます。
- application.properties に
spring.datasource.tomcat
の最低限の設定しか記述していないので、設定を見直してみます。 - Log4jdbc Spring Boot Starter というライブラリが出ていました。興味があるので試してみたいと思います。
- Gradle のバージョンが 2.13 なので 3.x へ上げます。
- 他に気になっている点を修正します。
- FreeMarkerUtils は内容が Helper クラスなので、クラス名やパッケージを変更します。
- application.properties から
hibernate.dialect
,spring.jpa.~
を削除します。 - ValidationMessages_ja_JP.properties をやめて messages.properties に1本化し、かつ IDEA の Transparent native-to-ascii conversion のチェックを外して UTF-8 の文字列のまま保存されるようにします。
- Hibernate を無効にしているので hibernate.properties は不要な気がするので削除してみます。
ソースコード
LendingUserDetailsHelper.java
@Component public class LendingUserDetailsHelper { /** * 現在ログインしているユーザのユーザIDを取得する * * @return ユーザID(user_info.user_id) */ public Long getLoginUserId() { Authentication auth = SecurityContextHolder.getContext().getAuthentication(); LendingUserDetails lendingUserDetails = (LendingUserDetails) auth.getPrincipal(); return lendingUserDetails.getUserId(); } }
- クラスに
@Component
アノテーションを付加します。 - getLoginUserId メソッドから
static
を削除します。
BooklistServiceTest.java
@RunWith(SpringRunner.class) @SpringBootTest public class BooklistServiceTest { private static final String MAILADDR_TANAKA_TARO = "tanaka.taro@sample.com"; @Rule @Autowired public TestDataResource testDataResource; @Autowired private DataSource dataSource; @Autowired private BooklistService booklistService; @MockBean private LendingUserDetailsHelper lendingUserDetailsHelper; @Test public void testTemporarySaveBookListCsvFile() throws Exception { given(lendingUserDetailsHelper.getLoginUserId()).willReturn(1L); UploadBooklistForm uploadBooklistForm = new UploadBooklistForm(); // テスト用のユーティリティクラスを作るべきですが、今回は他のテストクラスのメソッドをそのまま使います BooklistCsvFileServiceTest booklistCsvFileServiceTest = new BooklistCsvFileServiceTest(); uploadBooklistForm.setFileupload(booklistCsvFileServiceTest.createNoErrorCsvFile()); ..........
@MockBean private LendingUserDetailsHelper lendingUserDetailsHelper;
を追加します。- testTemporarySaveBookListCsvFile メソッド内の処理を
new Expectations(LendingUserDetailsHelper.class) {{ ... }};
→given(lendingUserDetailsHelper.getLoginUserId()).willReturn(1L);
へ変更します。
履歴
2017/04/04
初版発行。