5月26日、JJUG CCC 2018 Springに行ってきた!ので、その内容をメモメモ
はじめに
まだまだこれからJUnit5入門
をメモメモ
・まあ、まだそんなに使ってないよねJUnit5
・JUnit5とは
Javaのテスティングフレームワーク
ながらく4が使われていたが、その光景
API/アーキテクチャの全面的な再設計
17年9月からGAリリース
1.8いこうでないとX、ラムダ式のアサーション
・テスティングフレームワークに何を求めますか
簡潔さ
可読性
一貫性
・イントロダクション
何がよくなったのか
テスティングフレームワークにとって大事な部分がちゃんと進化
代わりに失ったもの:互換性
1.8+、パッケージ異なる。構造化テスト、パラメータテスト異なる
フレームワーク、IDEの対応状況
mavenはびみょーなところも
・セットアップ(maven前提)
JUnit4 pom.xml シンプル
JUnit5 pom.xml なんか増えてる・・これ何?
→マルチモジュール構成:用途、環境に合わせて適切なものをインポート
JUnit5 = JUnit Platform 実行基盤
+ JUnit Jypiter 新テストAPI
+ JUnit Vintage マイグレーション
代表的なモジュール
JUnit jupiter-api アノテーション多い
JUnit Jupiter -engin
JUnit platform launcher これないと、eclipseで動かない
モジュール間の依存関係:公式に出てる・・・よくわかんない
pomで指定するのは多くない
pom.xml
junit jupter engin
junit platform lancher
Mavenならjunit platform surefine provider
Gradleは4.6からネイティブサポート
→5.2からはBOMを使う
・シンプルなテスト
@Test
JUnit4と、ほぼ同じだか、パッケージ異なる
@org.junit.jupiter.api.Test ハブリックでなくてもOK(プライベートはX)
事前処理、事後処理
@BeforeAll
@BeforeEach
afterもおなじ
実行を無視する @Disabled reasonにメモ書きできる
テスト名の表示:@DisplayName(Mavenではまだ)
--- ここまでは大体JUnit4と同じ ------
・アサーション
org.junit.jupiter.api.Assertions
assertEquals 基本使い方は同じだが、引数の順番が変わった
グループ化:
JUnit4:途中のassertに失敗すると、次のassertは実行されない
JUnit5:assertAllラムダ式を渡す。渡した式が、検証に成功すると、成功になる
例外の検証
JUnit4:@Testのexpectedに例外クラスを指定する→投げられたメッセージの検証はできない
→外側でcatchしてしまう
JUnit5:assertThrows 例外を投げるメソッドは、ラムダ式の中で実行
・使いたくなってきました?
・構造化テスト・パラメータ化テスト
構造化テスト
テストクラスは複雑になりがち→似たようなテストは何とかしてまとめたい
JUnit5: @Nested
@Testと並べて書ける
パラメータ化テスト
引数だけ違うテストをまとめて実行したい
境界値テストなど
JUnit4:@Theory
JUnit5:pom.xmlにパラメータを追加
@ParameterlizedTest
@ValueSource:ほかにもソースの指定あり(@methodSource)
・拡張モデル
JUnit4では拡張方法2つ
Runner
Rule
JUnit5
extention
@extendsWithで指定する(複数可)
BeforeEachCallbackなど拡張ポイントいろいろある
・マイグレーション
戦略
1.JUnit5で書き換える
2.Vintageで動かす
書き換える場合
引数の順番が変わった
JUnit Vintage
既存はVintage,新規はJupiter
4と5、ごちゃませにしないようにしたい
・まとめ
(おぼえるのが)はやい、(かき)やすい、うまい
IDEの対応状況
ユーザーガイド一読
はじめに
まだまだこれからJUnit5入門
をメモメモ
・まあ、まだそんなに使ってないよねJUnit5
・JUnit5とは
Javaのテスティングフレームワーク
ながらく4が使われていたが、その光景
API/アーキテクチャの全面的な再設計
17年9月からGAリリース
1.8いこうでないとX、ラムダ式のアサーション
・テスティングフレームワークに何を求めますか
簡潔さ
可読性
一貫性
・イントロダクション
何がよくなったのか
テスティングフレームワークにとって大事な部分がちゃんと進化
代わりに失ったもの:互換性
1.8+、パッケージ異なる。構造化テスト、パラメータテスト異なる
フレームワーク、IDEの対応状況
mavenはびみょーなところも
・セットアップ(maven前提)
JUnit4 pom.xml シンプル
JUnit5 pom.xml なんか増えてる・・これ何?
→マルチモジュール構成:用途、環境に合わせて適切なものをインポート
JUnit5 = JUnit Platform 実行基盤
+ JUnit Jypiter 新テストAPI
+ JUnit Vintage マイグレーション
代表的なモジュール
JUnit jupiter-api アノテーション多い
JUnit Jupiter -engin
JUnit platform launcher これないと、eclipseで動かない
モジュール間の依存関係:公式に出てる・・・よくわかんない
pomで指定するのは多くない
pom.xml
junit jupter engin
junit platform lancher
Mavenならjunit platform surefine provider
Gradleは4.6からネイティブサポート
→5.2からはBOMを使う
・シンプルなテスト
@Test
JUnit4と、ほぼ同じだか、パッケージ異なる
@org.junit.jupiter.api.Test ハブリックでなくてもOK(プライベートはX)
事前処理、事後処理
@BeforeAll
@BeforeEach
afterもおなじ
実行を無視する @Disabled reasonにメモ書きできる
テスト名の表示:@DisplayName(Mavenではまだ)
--- ここまでは大体JUnit4と同じ ------
・アサーション
org.junit.jupiter.api.Assertions
assertEquals 基本使い方は同じだが、引数の順番が変わった
グループ化:
JUnit4:途中のassertに失敗すると、次のassertは実行されない
JUnit5:assertAllラムダ式を渡す。渡した式が、検証に成功すると、成功になる
例外の検証
JUnit4:@Testのexpectedに例外クラスを指定する→投げられたメッセージの検証はできない
→外側でcatchしてしまう
JUnit5:assertThrows 例外を投げるメソッドは、ラムダ式の中で実行
・使いたくなってきました?
・構造化テスト・パラメータ化テスト
構造化テスト
テストクラスは複雑になりがち→似たようなテストは何とかしてまとめたい
JUnit5: @Nested
@Testと並べて書ける
パラメータ化テスト
引数だけ違うテストをまとめて実行したい
境界値テストなど
JUnit4:@Theory
JUnit5:pom.xmlにパラメータを追加
@ParameterlizedTest
@ValueSource:ほかにもソースの指定あり(@methodSource)
・拡張モデル
JUnit4では拡張方法2つ
Runner
Rule
JUnit5
extention
@extendsWithで指定する(複数可)
BeforeEachCallbackなど拡張ポイントいろいろある
・マイグレーション
戦略
1.JUnit5で書き換える
2.Vintageで動かす
書き換える場合
引数の順番が変わった
JUnit Vintage
既存はVintage,新規はJupiter
4と5、ごちゃませにしないようにしたい
・まとめ
(おぼえるのが)はやい、(かき)やすい、うまい
IDEの対応状況
ユーザーガイド一読