Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ユニットテスト環境改善/improve-unit-test-environment
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
kiyoshi yamashita
January 18, 2024
0
410
ユニットテスト環境改善/improve-unit-test-environment
2024/1/19 若手・学生サーバーサイドエンジニアLT会 ラクーンホールディングス x ゆめみ のコラボLT会
https://yumemi.connpass.com/event/301942/
kiyoshi yamashita
January 18, 2024
Tweet
Share
More Decks by kiyoshi yamashita
See All by kiyoshi yamashita
めぐろLT#6 怖い話 サーバーが次々死んでいく
ky6yk
0
210
画像のバリデーションはファイルサイズチェックだけでいいと思ってない?
ky6yk
0
520
ES2021/2022
ky6yk
0
46
Featured
See All Featured
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
150
We Have a Design System, Now What?
morganepeng
54
8k
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
910
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
83
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
240
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
300
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
160
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
How To Stay Up To Date on Web Technology
chriscoyier
791
250k
Leo the Paperboy
mayatellez
4
1.4k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
120
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.2k
Transcript
ユニットテスト環境改善 yamashita.kiyoshi 若手・学生サーバーサイドエンジニアLT会 2024/01/19
まずは自己紹介 名前:山下 清史 所属:株式会社ラクーンホールディングス 技術戦略部 開発チーム 主な仕事:BtoB卸売りサイト スーパーデリバリーの開発 趣味:ISUCON(前回 上位25%)
vuejs-jpのコアスタッフしてます
Javaのユニットテスト環境が辛かった🥵 - FWはSpring - テストの実行が遅い - 1000ケースしかないのに15分程度かかる - masterにmerge後テストを待たずにリリース...
- テストを書くモチベーションが湧かない - カバレッジが可視化されていないので達成感が無い - テストの網羅性を注目されていなかった - テスティングライブラリのVersionが古い - JUnit 4, JMockit 1.33 - Java11の文法に対応していない - 複数の振る舞いをテストするときの記述量が増える
この一年でやったこと - JUnit4から5へリプレース - 遅いテストケースの原因探して修正 - カバレッジの可視化
JUnit4から5へリプレース
JUnitのVersionアップ 移行で辛かったポイント① - パッケージが変更されていた - org.junit.Test => org.junit.jupiter.api.Test - 一部機能が変わっておりコンパイルできない👼
- 例外が投げられることのテストでは - @Test(expected = NullPointerException.class)が Assertions.assertThrows(NullPointerException.class 根気よく空き時間を見つけて修正💪
JUnitのVersionアップ 移行で辛かったポイント② - JUnitのVersionをあげたことでMockライブラリ(JMockit)もVersionを上げる必要 が出てきた - JMockitはマイナーバージョンアップでも後方互換性がないので 最新Versionにすると全て書き換える必要あり - 開発は2019年で止まっている
JMockitで書かれている箇所をMockito🍷に書き換え なんとかJUnit5に移行できた...
Mockitoの選定理由 - JUnit5に対応している - 開発が今も続いている - 毎月リリースされている - 学習コストが低い -
弊社の新卒研修で使われているので知っている人が多い - 日本語のドキュメントがある
JUnit5にリプレースした結果 - JUnitが最新バージョンになった - Java8以降の文法(ラムダ関数など)が使用可能 - JUnitの便利な機能 - パラメータ化テスト -
@DisplayName - テストを階層化して整理
テストが遅い問題
テストが遅い問題① 遅いテストを確認すると... 1つのテストクラスだけで約50秒!!
テストが遅い問題① 巨大な画像(6000px×6000px)の画像をリサイズしていた テスト対象のコード内でpropertyファイルから取得する リサイズの上限が6000px×6000pxであるため リフレクションでテスト時のみ縦横ピクセルのリサイズの上限を変更
テストが遅い問題① 約50秒速くした 他にも遅いテストを見つけては原因調査...
テストが遅い問題② 問題: 複数のテストクラスで同じDIコンテナ使用していたが、 テスト毎に生成しては破棄を繰り返していた。 クラスA クラスC クラスB キャッシュ済みのDIコンテナが使えないとテストクラスごとに DIコンテナ生成コストがかかる
テストが遅い問題② クラスA クラスC クラスB 全てのテストクラスでキャッシュ済みのDIコンテナを 利用出来るように修正 問題: 複数のテストクラスで同じDIコンテナ使用していたが、 テスト毎に生成しては破棄を繰り返していた。
カバレッジ可視化
カバレッジ可視化 - カバレッジが計測されていない状況だったので、 テスト作成モチベーションがわかなかった - MR時にどの行がテストでカバーされていないか表示 - MR時にカバレッジの割合変化を表示 -
READMEにバッジを張る - gitlab pagesにカバレッジレポートをホスティング
カバレッジ可視化 - カバレッジが計測されていない状況だったので、 テスト作成モチベーションがわかなかった - MR時にどの行がテストでカバーされていないか表示 - MR時にカバレッジの割合変化を表示 -
READMEにバッジを張る - gitlab pagesにカバレッジレポートをホスティング
カバレッジ可視化 コードレビュー時の指標の1つ、モチベーションアップに繋がりそう!?
カバレッジ可視化 - カバレッジが計測されていない状況だったので、 テストの品質が低い状況だった... - MR時にどの行がテストでカバーされていないか表示 - MR時にカバレッジの割合変化を表示 -
READMEにバッジを張る - gitlab pagesにカバレッジレポートをホスティング
カバレッジ可視化 カバレッジを簡単に確認できる💪
まとめ - JUnitのVersionをあげたことでテストの書きやすさ↗ - 遅いテストを修正、キャッシュ済みのDIコンテナを使用 - テスト速度↗(約15分⇒約6分) - カバレッジレポートをgitlab-pagesにホスティングさせた -
MR時にカバーされていないコードを分かるようにした - テストへのモチベーション↗ - まだまだ改善できる余地があるのでこれからもやっていき!
参考 - Spring コンテキストキャッシング - GitLab テストカバレッジの可視化