こんにちは、さるまりんです。
最近Javaと仲良しなのでJunitでテストすることが増えました。モックって便利ですね。
データベースに絡むテストをしていて悩んだことをメモしておきます。
Spring DATA JPAでのクエリを試していた時、
SomeData findBySomeId(Long someId);
は、
SomeData someData = new SomeData();
...
when(repo.findBySomeId(1L)).thenReturn(someData);
のように記述できるのですが、
Optional<SomeData> findById(Long id);
はどうでしょうか?
Spring Data JPAで1件だけ結果を返すメソッドの戻り値の型が、null
かもしれないしnull
じゃないかもしれないを表すOptional
だったのでどうしようかなと悩んでました。
結果は簡単でした。
Optional.of()
を使うことでOptional
の返却をモックすることができます。
SomeData someData = new SomeData();
...
when(repo.findById(1L)).thenReturn(Optional.of(someData));
Spring Data JPAの自動実装されるメソッドの利用は楽なのですが、実際に何が起こっているのかをなんとなくでも把握してないと悩むなあと思いました。ちゃんとリファレンス読まないとですね。
読んでくださってありがとうございます。
それではまた!