Slide 1

Slide 1 text

JUnit5のParameterized Testについて ⾷べログ開発本部アプリ開発部 太⽥ 定志 2024年11⽉19⽇(⽕) 1

Slide 2

Slide 2 text

⾃⼰紹介 太⽥ 定志(おおた さだし) • 2018年 株式会社カカクコム⼊社 • ⾷べログアプリ開発部 基盤チーム リーダー • 主にAndroidアプリを担当 • アーキテクチャの⾒直し、リファクタリング、OS/ライブラリのアップデー ト、リリースフローの最適化、CI/CDの改善、開発環境の整備、採⽤、チー ムビルディング などなど、、、 • X • sada(@sadashi_ota) • GitHub • @sadashi-ota • Qiita • sadashi 2 The Android robot is reproduced or modified from work created and shared by Google and used according to terms described in the Creative Commons 3.0 Attribution License.

Slide 3

Slide 3 text

JUnit5のParameterized Testについて 3 JUnit5のParameterized Test 使ってますか?

Slide 4

Slide 4 text

JUnit5のParameterized Testについて 4 セットアップ⽅法や基本的な使い⽅は DroidKaigi2024ですばらしいセッションがあったので ↓ ↓ ↓をご参照ください。 https://2024.droidkaigi.jp/timetable/679601/

Slide 5

Slide 5 text

JUnit5のParameterized Testについて 5 今⽇はParameterized Testの ちょっとしたTipsや あまり知られてない(かもしれない)機能を ご紹介したいと思います。

Slide 6

Slide 6 text

JUnit5のParameterized Testについて 6 @CsvSource @CsvFileSource

Slide 7

Slide 7 text

@CsvSource / @CsvFileSource 7 いつでも便利な@CsvSource。区切り⽂字の変更はdelimiterでできます。

Slide 8

Slide 8 text

@CsvSource / @CsvFileSource 8 その他、nullValuesでnullとする⽂字列を追加したり、 emptyValueで空⽂字表⽰を変えたり、⾊々なことができます。

Slide 9

Slide 9 text

@CsvSource / @CsvFileSource 9 また、パラメータが増えてきたらCsvFileSourceで外部ファイルを指定しましょう。 numLinesToSkipを使えばヘッダー情報をスキップできます。

Slide 10

Slide 10 text

JUnit5のParameterized Testについて 10 @NullSource @EmptySource

Slide 11

Slide 11 text

@NullSource / @EmptySource 11 例えば、@ValueSourceで⽂字列を扱う時、emptyは指定できるけど、nullは指定できません

Slide 12

Slide 12 text

@NullSource / @EmptySource 12 そんな時は、@NullSourceが使えます

Slide 13

Slide 13 text

@NullSource / @EmptySource 13 もちろん、便利な@CsvSourceでも同じことはできますが、ぱっと⾒わかりにくいので ※ちなみに引数⼀つだと@CsvSourceでは””は指定できません

Slide 14

Slide 14 text

@NullSource / @EmptySource 14 @NullSource / @EmptySource で⾒やすくしちゃいましょう。 両⽅なら@NullAndEmptySourceでもOKです!

Slide 15

Slide 15 text

@NullSource / @EmptySource 15 @EmptySourceはString以外にListやMapなどでも利⽤できます

Slide 16

Slide 16 text

JUnit5のParameterized Testについて 16 ArgumentsAccessor

Slide 17

Slide 17 text

ArgumentsAccessor 17 引数が多くなってきて⾒通しが悪い時はArgumentsAccessorでまとめることもできます。 ※個⼈的には引数で明確にした⽅がわかりやすいのであまり使いませんが。。。

Slide 18

Slide 18 text

JUnit5のParameterized Testについて 18 ArgumentConverter @ConvertWith

Slide 19

Slide 19 text

ArgumentConverter / @ConvertWith 19 ⽇付のように特定のフォーマットの⽂字列をオブジェクトに変えたい時は ArgumentsConverterを実装しましょう(value classはプロパティの型に依存します)

Slide 20

Slide 20 text

ArgumentConverter / @ConvertWith 20 @CsvSourceでListを使いたい時もこんな感じで使えます。(`;`をセパレーターにした場合)

Slide 21

Slide 21 text

JUnit5のParameterized Testについて 21 ArgumentsAggregator @AggregateWith

Slide 22

Slide 22 text

ArgumentsAggregator / @AggregateWith 22 パラメータをデータクラスに変換したい時はArgumentsAggregatorを使いましょう!

Slide 23

Slide 23 text

ArgumentsAggregator / @AggregateWith 23 @MethodSourceや@FieldSourceでも同じことはできますが、 個⼈的にはArgumentsAggregatorを使う⽅が パラメータをテストコードの近くで定義できるので好きです。

Slide 24

Slide 24 text

まとめ 24 JUnit5のParameterized Testは すごい便利なので、ぜひ活⽤していきましょう!

Slide 25

Slide 25 text

最後に 25 We are hiring!!! カジュアル⾯談⼤歓迎ですのでお気軽にご連絡ください iOSエンジニア Androidエンジニア

Slide 26

Slide 26 text

ご清聴ありがとうございました 26 Android is a trademark of Google LLC. Kotlin is a registered trademark of the Kotlin Foundation. IOSは、Cisco の⽶国およびその他の国における商標または登録商標であり、ライセンスに基づき使⽤されています。