Submit Search
Upload
Spring 5でSpring Testのここが変わる_公開版
•
12 likes
•
22,219 views
Yuichi Hasegawa
Follow
Spring 5でSpring Testのここが変わる_公開版
Read less
Read more
Software
Report
Share
Report
Share
1 of 176
Download now
Download to read offline
Recommended
SpringBootTest入門
SpringBootTest入門
Yahoo!デベロッパーネットワーク
Springを何となく使ってる人が抑えるべきポイント
Springを何となく使ってる人が抑えるべきポイント
土岐 孝平
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
NTT DATA Technology & Innovation
さくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組み
Takeshi Ogawa
Kongの概要と導入事例
Kongの概要と導入事例
briscola-tokyo
The Twelve-Factor Appで考えるAWSのサービス開発
The Twelve-Factor Appで考えるAWSのサービス開発
Amazon Web Services Japan
Spring Bootをはじめる時にやるべき10のこと
Spring Bootをはじめる時にやるべき10のこと
心 谷本
その Pod 突然落ちても大丈夫ですか!?(OCHaCafe5 #5 実験!カオスエンジニアリング 発表資料)
その Pod 突然落ちても大丈夫ですか!?(OCHaCafe5 #5 実験!カオスエンジニアリング 発表資料)
NTT DATA Technology & Innovation
Recommended
SpringBootTest入門
SpringBootTest入門
Yahoo!デベロッパーネットワーク
Springを何となく使ってる人が抑えるべきポイント
Springを何となく使ってる人が抑えるべきポイント
土岐 孝平
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
NTT DATA Technology & Innovation
さくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組み
Takeshi Ogawa
Kongの概要と導入事例
Kongの概要と導入事例
briscola-tokyo
The Twelve-Factor Appで考えるAWSのサービス開発
The Twelve-Factor Appで考えるAWSのサービス開発
Amazon Web Services Japan
Spring Bootをはじめる時にやるべき10のこと
Spring Bootをはじめる時にやるべき10のこと
心 谷本
その Pod 突然落ちても大丈夫ですか!?(OCHaCafe5 #5 実験!カオスエンジニアリング 発表資料)
その Pod 突然落ちても大丈夫ですか!?(OCHaCafe5 #5 実験!カオスエンジニアリング 発表資料)
NTT DATA Technology & Innovation
Knative Eventing 入門(Kubernetes Novice Tokyo #11 発表資料)
Knative Eventing 入門(Kubernetes Novice Tokyo #11 発表資料)
NTT DATA Technology & Innovation
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
NTT DATA Technology & Innovation
これから始めるSpringのwebアプリケーション
これから始めるSpringのwebアプリケーション
土岐 孝平
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)
NTT DATA Technology & Innovation
Unified JVM Logging
Unified JVM Logging
Yuji Kubota
Kubernetes環境に対する性能試験(Kubernetes Novice Tokyo #2 発表資料)
Kubernetes環境に対する性能試験(Kubernetes Novice Tokyo #2 発表資料)
NTT DATA Technology & Innovation
DockerとKubernetesをかけめぐる
DockerとKubernetesをかけめぐる
Kohei Tokunaga
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
Taku Miyakawa
インフラCICDの勘所
インフラCICDの勘所
Toru Makabe
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
NTT DATA Technology & Innovation
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
JustSystems Corporation
TLS, HTTP/2演習
TLS, HTTP/2演習
shigeki_ohtsu
基礎からのOAuth 2.0とSpring Security 5.1による実装
基礎からのOAuth 2.0とSpring Security 5.1による実装
Masatoshi Tada
Helidon 概要
Helidon 概要
オラクルエンジニア通信
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Chihiro Ito
怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション
土岐 孝平
他社製品と比較した際のAuth0のいいところ
他社製品と比較した際のAuth0のいいところ
Satoshi Takayanagi
Spring Boot × Vue.jsでSPAを作る
Spring Boot × Vue.jsでSPAを作る
Go Miyasaka
これからSpringを使う開発者が知っておくべきこと
これからSpringを使う開発者が知っておくべきこと
土岐 孝平
入社1年目のプログラミング初心者がSpringを学ぶための手引き
入社1年目のプログラミング初心者がSpringを学ぶための手引き
土岐 孝平
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
NTT DATA Technology & Innovation
Optuna on Kubeflow Pipeline 分散ハイパラチューニング
Optuna on Kubeflow Pipeline 分散ハイパラチューニング
Takashi Suzuki
More Related Content
What's hot
Knative Eventing 入門(Kubernetes Novice Tokyo #11 発表資料)
Knative Eventing 入門(Kubernetes Novice Tokyo #11 発表資料)
NTT DATA Technology & Innovation
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
NTT DATA Technology & Innovation
これから始めるSpringのwebアプリケーション
これから始めるSpringのwebアプリケーション
土岐 孝平
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)
NTT DATA Technology & Innovation
Unified JVM Logging
Unified JVM Logging
Yuji Kubota
Kubernetes環境に対する性能試験(Kubernetes Novice Tokyo #2 発表資料)
Kubernetes環境に対する性能試験(Kubernetes Novice Tokyo #2 発表資料)
NTT DATA Technology & Innovation
DockerとKubernetesをかけめぐる
DockerとKubernetesをかけめぐる
Kohei Tokunaga
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
Taku Miyakawa
インフラCICDの勘所
インフラCICDの勘所
Toru Makabe
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
NTT DATA Technology & Innovation
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
JustSystems Corporation
TLS, HTTP/2演習
TLS, HTTP/2演習
shigeki_ohtsu
基礎からのOAuth 2.0とSpring Security 5.1による実装
基礎からのOAuth 2.0とSpring Security 5.1による実装
Masatoshi Tada
Helidon 概要
Helidon 概要
オラクルエンジニア通信
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Chihiro Ito
怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション
土岐 孝平
他社製品と比較した際のAuth0のいいところ
他社製品と比較した際のAuth0のいいところ
Satoshi Takayanagi
Spring Boot × Vue.jsでSPAを作る
Spring Boot × Vue.jsでSPAを作る
Go Miyasaka
これからSpringを使う開発者が知っておくべきこと
これからSpringを使う開発者が知っておくべきこと
土岐 孝平
入社1年目のプログラミング初心者がSpringを学ぶための手引き
入社1年目のプログラミング初心者がSpringを学ぶための手引き
土岐 孝平
What's hot
(20)
Knative Eventing 入門(Kubernetes Novice Tokyo #11 発表資料)
Knative Eventing 入門(Kubernetes Novice Tokyo #11 発表資料)
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
これから始めるSpringのwebアプリケーション
これから始めるSpringのwebアプリケーション
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)
Unified JVM Logging
Unified JVM Logging
Kubernetes環境に対する性能試験(Kubernetes Novice Tokyo #2 発表資料)
Kubernetes環境に対する性能試験(Kubernetes Novice Tokyo #2 発表資料)
DockerとKubernetesをかけめぐる
DockerとKubernetesをかけめぐる
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
インフラCICDの勘所
インフラCICDの勘所
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
TLS, HTTP/2演習
TLS, HTTP/2演習
基礎からのOAuth 2.0とSpring Security 5.1による実装
基礎からのOAuth 2.0とSpring Security 5.1による実装
Helidon 概要
Helidon 概要
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組み
怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション
他社製品と比較した際のAuth0のいいところ
他社製品と比較した際のAuth0のいいところ
Spring Boot × Vue.jsでSPAを作る
Spring Boot × Vue.jsでSPAを作る
これからSpringを使う開発者が知っておくべきこと
これからSpringを使う開発者が知っておくべきこと
入社1年目のプログラミング初心者がSpringを学ぶための手引き
入社1年目のプログラミング初心者がSpringを学ぶための手引き
Similar to Spring 5でSpring Testのここが変わる_公開版
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
NTT DATA Technology & Innovation
Optuna on Kubeflow Pipeline 分散ハイパラチューニング
Optuna on Kubeflow Pipeline 分散ハイパラチューニング
Takashi Suzuki
大規模・長期保守を見据えたエンタープライズシステム開発へのSpring Frameworkの適用
大規模・長期保守を見据えたエンタープライズシステム開発へのSpring Frameworkの適用
apkiban
Eclipse PDT + MakeGoodによるPHPコードのテスト
Eclipse PDT + MakeGoodによるPHPコードのテスト
Atsuhiro Kubo
2018年度新入社員研修実績紹介
2018年度新入社員研修実績紹介
CASAREAL, Inc.
10大ニュースで振り返るPGCon2015
10大ニュースで振り返るPGCon2015
NTT DATA OSS Professional Services
de:code2018 登壇資料
de:code2018 登壇資料
Hiroshi Senga
MakeGoodで快適なテスト駆動開発を
MakeGoodで快適なテスト駆動開発を
Atsuhiro Kubo
Androidテスティング実践3 ユニットテスト・CI編
Androidテスティング実践3 ユニットテスト・CI編
株式会社 NTTテクノクロス
Eclipse PDT + MakeGood による PHP コードのテスト
Eclipse PDT + MakeGood による PHP コードのテスト
Atsuhiro Kubo
快適・簡単・安心なアプリE2Eテストの実行環境 #stac2017
快適・簡単・安心なアプリE2Eテストの実行環境 #stac2017
Yahoo!デベロッパーネットワーク
.NET アプリを改善して実践する継続的インテグレーション
.NET アプリを改善して実践する継続的インテグレーション
Yuta Matsumura
UIテストの実行時間の短縮の方法
UIテストの実行時間の短縮の方法
Toshiyuki Hirata
初めてでも30分で分かるSpring 5 & Spring Boot 2オーバービュー
初めてでも30分で分かるSpring 5 & Spring Boot 2オーバービュー
Masatoshi Tada
AnsibleおよびDockerで始めるInfrastructure as a Code
AnsibleおよびDockerで始めるInfrastructure as a Code
Satoru Yoshida
Azure Functions あれこれ
Azure Functions あれこれ
Yasuaki Matsuda
Spring Security 5.0 解剖速報
Spring Security 5.0 解剖速報
Takuya Iwatsuka
fastlane x iOSアプリのCI
fastlane x iOSアプリのCI
Toshiyuki Hirata
チーム×ツール Team Foundation Server & Service 共感しActionできる開発基盤 アルティメイタム【デブサミ 2013 ...
チーム×ツール Team Foundation Server & Service 共感しActionできる開発基盤 アルティメイタム【デブサミ 2013 ...
智治 長沢
Agileツール適合化分科会(テスト自動化ツール)
Agileツール適合化分科会(テスト自動化ツール)
masanori kataoka
Similar to Spring 5でSpring Testのここが変わる_公開版
(20)
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Optuna on Kubeflow Pipeline 分散ハイパラチューニング
Optuna on Kubeflow Pipeline 分散ハイパラチューニング
大規模・長期保守を見据えたエンタープライズシステム開発へのSpring Frameworkの適用
大規模・長期保守を見据えたエンタープライズシステム開発へのSpring Frameworkの適用
Eclipse PDT + MakeGoodによるPHPコードのテスト
Eclipse PDT + MakeGoodによるPHPコードのテスト
2018年度新入社員研修実績紹介
2018年度新入社員研修実績紹介
10大ニュースで振り返るPGCon2015
10大ニュースで振り返るPGCon2015
de:code2018 登壇資料
de:code2018 登壇資料
MakeGoodで快適なテスト駆動開発を
MakeGoodで快適なテスト駆動開発を
Androidテスティング実践3 ユニットテスト・CI編
Androidテスティング実践3 ユニットテスト・CI編
Eclipse PDT + MakeGood による PHP コードのテスト
Eclipse PDT + MakeGood による PHP コードのテスト
快適・簡単・安心なアプリE2Eテストの実行環境 #stac2017
快適・簡単・安心なアプリE2Eテストの実行環境 #stac2017
.NET アプリを改善して実践する継続的インテグレーション
.NET アプリを改善して実践する継続的インテグレーション
UIテストの実行時間の短縮の方法
UIテストの実行時間の短縮の方法
初めてでも30分で分かるSpring 5 & Spring Boot 2オーバービュー
初めてでも30分で分かるSpring 5 & Spring Boot 2オーバービュー
AnsibleおよびDockerで始めるInfrastructure as a Code
AnsibleおよびDockerで始めるInfrastructure as a Code
Azure Functions あれこれ
Azure Functions あれこれ
Spring Security 5.0 解剖速報
Spring Security 5.0 解剖速報
fastlane x iOSアプリのCI
fastlane x iOSアプリのCI
チーム×ツール Team Foundation Server & Service 共感しActionできる開発基盤 アルティメイタム【デブサミ 2013 ...
チーム×ツール Team Foundation Server & Service 共感しActionできる開発基盤 アルティメイタム【デブサミ 2013 ...
Agileツール適合化分科会(テスト自動化ツール)
Agileツール適合化分科会(テスト自動化ツール)
More from Yuichi Hasegawa
Spring 18年の歴史
Spring 18年の歴史
Yuichi Hasegawa
Enterprise Microservice
Enterprise Microservice
Yuichi Hasegawa
thymeleafさいしょの一歩
thymeleafさいしょの一歩
Yuichi Hasegawa
マイクロサービス入門(Spring fest 2017)
マイクロサービス入門(Spring fest 2017)
Yuichi Hasegawa
20170525 jsug バッチは地味だが役に立つ
20170525 jsug バッチは地味だが役に立つ
Yuichi Hasegawa
Application Re-Architecture Technology ~ StrutsからSpring MVCへ ~
Application Re-Architecture Technology ~ StrutsからSpring MVCへ ~
Yuichi Hasegawa
Spring Day 2016 springの現在過去未来
Spring Day 2016 springの現在過去未来
Yuichi Hasegawa
こどもの絵本 ヒトラーとナチ
こどもの絵本 ヒトラーとナチ
Yuichi Hasegawa
Jsug 20160422 slides
Jsug 20160422 slides
Yuichi Hasegawa
Spring知っておきたい
Spring知っておきたい
Yuichi Hasegawa
Spring4-DevLove発表資料
Spring4-DevLove発表資料
Yuichi Hasegawa
[Jjug]java small object programming
[Jjug]java small object programming
Yuichi Hasegawa
[豆ナイト]Java small object programming
[豆ナイト]Java small object programming
Yuichi Hasegawa
Jjug springセッション
Jjug springセッション
Yuichi Hasegawa
Spring3.1概要x di
Spring3.1概要x di
Yuichi Hasegawa
Spring3.1 aop-mvc
Spring3.1 aop-mvc
Yuichi Hasegawa
Spring3.1概要 AOP & MVC
Spring3.1概要 AOP & MVC
Yuichi Hasegawa
More from Yuichi Hasegawa
(17)
Spring 18年の歴史
Spring 18年の歴史
Enterprise Microservice
Enterprise Microservice
thymeleafさいしょの一歩
thymeleafさいしょの一歩
マイクロサービス入門(Spring fest 2017)
マイクロサービス入門(Spring fest 2017)
20170525 jsug バッチは地味だが役に立つ
20170525 jsug バッチは地味だが役に立つ
Application Re-Architecture Technology ~ StrutsからSpring MVCへ ~
Application Re-Architecture Technology ~ StrutsからSpring MVCへ ~
Spring Day 2016 springの現在過去未来
Spring Day 2016 springの現在過去未来
こどもの絵本 ヒトラーとナチ
こどもの絵本 ヒトラーとナチ
Jsug 20160422 slides
Jsug 20160422 slides
Spring知っておきたい
Spring知っておきたい
Spring4-DevLove発表資料
Spring4-DevLove発表資料
[Jjug]java small object programming
[Jjug]java small object programming
[豆ナイト]Java small object programming
[豆ナイト]Java small object programming
Jjug springセッション
Jjug springセッション
Spring3.1概要x di
Spring3.1概要x di
Spring3.1 aop-mvc
Spring3.1 aop-mvc
Spring3.1概要 AOP & MVC
Spring3.1概要 AOP & MVC
Spring 5でSpring Testのここが変わる_公開版
1.
© 2018 NTT
DATA Corporation 2018/10/31 株式会社NTTデータ 生産技術部 ソフトウェア工学推進センタ 平栗 勇人 Spring 5でSpring Testのここが変わる
2.
© 2018 NTT
DATA Corporation 2 平栗 勇人 株式会社NTTデータ 技術革新統括本部 システム技術本部 生産技術部 ソフトウェア工学推進センタ TERASOLUNA FWチーム Server FWの開発リーダー
3.
© 2018 NTT
DATA Corporation 3 TERASOLUNAフレームワークのコンセプト Spring Security Spring MVC JPA MyBatis 1.OSSを組み合わせ、 独自実装部分を極小化 2.OSSの機能を最大限に 活かして開発するための ベストプラクティスを提供 開発ガイドライン http://terasolunaorg.github.io/ 基盤としてSpringを採用している
4.
© 2018 NTT
DATA Corporation 4 はじめに
5.
© 2018 NTT
DATA Corporation 5 そもそも
6.
© 2018 NTT
DATA Corporation 6 なぜ、 テストを行うのか?
7.
© 2018 NTT
DATA Corporation 7 仕様通りに 動くことを 確認するため
8.
© 2018 NTT
DATA Corporation 8 どんなに優秀な 人間でもミスをする。 ミスをしない人間は、何もしない人間だけだ。 (The only man who never makes mistakes is the man who never does anything.) -- Theodore Roosevelt
9.
© 2018 NTT
DATA Corporation 9 自分の作成した コードに責任を持ち、
10.
© 2018 NTT
DATA Corporation 10 安心して開発を 続けるために テストは不可欠。
11.
© 2018 NTT
DATA Corporation 11 コーディングすれば もれなく付きまとう 作業なので、
12.
© 2018 NTT
DATA Corporation 12 テストの効率性は、 生産性に直結。
13.
© 2018 NTT
DATA Corporation 13 Springは テストしやすいの?
14.
© 2018 NTT
DATA Corporation 14 本日は、 それについてお話しします。
15.
© 2018 NTT
DATA Corporation 15 Springとテスト クラスやメソッド単位でのテスト クラス同士を組み合わせたテスト Spring 5での変更点 JUnit 5のサポート テスト並行実行のサポート その他の改善 まとめ
16.
© 2018 NTT
DATA Corporation 16 Springとテスト クラスやメソッド単位でのテスト クラス同士を組み合わせたテスト Spring 5での変更点 JUnit 5のサポート テスト並行実行のサポート その他の改善 まとめ
17.
© 2018 NTT
DATA Corporation 17 大規模な アプリケーションでは、
18.
© 2018 NTT
DATA Corporation 18 バグを発見する タイミングが 遅ければ遅いほど、
19.
© 2018 NTT
DATA Corporation 19 影響範囲は 大きくなる。
20.
© 2018 NTT
DATA Corporation 20 なので、
21.
© 2018 NTT
DATA Corporation 21 いかに早くバグを 発見できるかが重要。
22.
© 2018 NTT
DATA Corporation 22 バグを早期発見 するためには、
23.
© 2018 NTT
DATA Corporation 23 クラスやメソッドといった小さな 単位でテストすることが大切。 クラス A 依存 依存 クラス B クラス C メソッド1 メソッド2 JUnit テスト メソッド1 メソッド2 メソッド1 メソッド2 JUnit テスト JUnit テスト
24.
© 2018 NTT
DATA Corporation 24 また、作成したらすぐにモックを 使ってテストできるのが理想。 クラス A 依存 依存 モック クラス B モック クラス C JUnit テスト メソッド1 メソッド2
25.
© 2018 NTT
DATA Corporation 25 しかし、疎結合を 意識しないと、
26.
© 2018 NTT
DATA Corporation 26 クラス単体で 試験すること自体が 難しくなる。
27.
© 2018 NTT
DATA Corporation 27 悪い例
28.
© 2018 NTT
DATA Corporation 28 public class A { public String foo() { B objB = new B(); // objB.doSomething() // 処理結果に応じてreturn } } A#foo()は、B#doSomething()の 処理結果に応じて”成功”、”失敗”を返す。
29.
© 2018 NTT
DATA Corporation 29 public class A { public String foo() { B objB = new B(); // objB.doSomething() // 処理結果に応じてreturn } } いま、クラスA単体の挙動をテストしたい。
30.
© 2018 NTT
DATA Corporation 30 A#foo()の戻り値が”失敗”であることを確 認するテストメソッドAを作成する。 class ATest { @Test void fooの戻り値が「失敗」であること() { A objA = new A(); assertEquals(“失敗", objA.foo()); } }
31.
© 2018 NTT
DATA Corporation 31 A#foo()内でBをnewしているため、 テスト実行時にBも実行する必要がある。 class ATest { @Test void fooの戻り値が「失敗」であること() { A objA = new A(); assertEquals(“失敗", objA.foo()); } } public String foo() { B objB = new B();
32.
© 2018 NTT
DATA Corporation 32 そして、このテストケースを通すためには、 class ATest { @Test void fooの戻り値が「失敗」であること() { A objA = new A(); assertEquals(“失敗", objA.foo()); } } public String foo() { B objB = new B();
33.
© 2018 NTT
DATA Corporation 33 B#doSomething()の処理を失敗させる 必要があり、初期化が煩雑になる。 class ATest { @Test void fooの戻り値が「失敗」であること() { A objA = new A(); assertEquals(“失敗", objA.foo()); } } public String foo() { B objB = new B();
34.
© 2018 NTT
DATA Corporation 34 そもそもクラス単体での試験に なっていない。。。 class ATest { @Test void fooの戻り値が「失敗」であること() { A objA = new A(); assertEquals(“失敗", objA.foo()); } } public String foo() { B objB = new B();
35.
© 2018 NTT
DATA Corporation 35 メソッド内でnew するだけで、疎結合 ではなくなってしまい、
36.
© 2018 NTT
DATA Corporation 36 単体テストの実施 そのものが難しくなる。
37.
© 2018 NTT
DATA Corporation 37 疎結合にする一つの デザインパターンとして、 DIがある。
38.
© 2018 NTT
DATA Corporation 38 Springは、 フレームワークの 最重要機能として、
39.
© 2018 NTT
DATA Corporation 39 DIを自動で行い、 インスタンスを 組み立ててくれる基盤、
40.
© 2018 NTT
DATA Corporation 40 DIコンテナ を 提供している。
41.
© 2018 NTT
DATA Corporation 41 クラス A クラス Bの生成 クラス B DIコンテナ クラス A 利用 Bの実装クラス クラス Aはクラス Bのインスタンスを直接生成している Bのインタ フェース 生成 通常のJava SpringのDI 注入 DIコンテナがクラス Bのインスタンスを生成・注入している クラス B B objB = new B();
42.
© 2018 NTT
DATA Corporation 42 このように、
43.
© 2018 NTT
DATA Corporation 43 クラス間が疎結合 になるので、
44.
© 2018 NTT
DATA Corporation 44 クラス A Bの実装クラス Bのインタ フェース クラス B モック クラス B 依存クラスをモックに差し替えること が可能になる。 差し替え可能
45.
© 2018 NTT
DATA Corporation 45 クラス A Bの実装クラス Bのインタ フェース クラス B モック クラス B よって、クラス単体でのテストが可能 になる! JUnit テスト
46.
© 2018 NTT
DATA Corporation 46 クラス A Bの実装クラス Bのインタ フェース クラス B モック クラス B モックテストは、Mockitoなどのモック ライブラリを使うことが多い。 JUnit テスト
47.
© 2018 NTT
DATA Corporation 47 Springとテスト クラスやメソッド単位でのテスト クラス同士を組み合わせたテスト Spring 5での変更点 JUnit 5のサポート テスト並行実行のサポート その他の改善 まとめ
48.
© 2018 NTT
DATA Corporation 48 次に、単体テストを終えたクラス 同士を組み合わせてテストする 時を考えてみる。 クラス A 依存 依存 クラス B モック クラス C JUnit テスト
49.
© 2018 NTT
DATA Corporation 49 インスタンスの生成や依存性の 解決はDIコンテナが担っている ので、 DIコンテナ クラス A 利用 Bの実装クラス Bのインタ フェース 生成注入 クラス B
50.
© 2018 NTT
DATA Corporation 50 クラスBに依存するクラスAのテ ストをするには、DIコンテナが必 要となる。しかし…、 DIコンテナ クラス A 利用 Bの実装クラス Bのインタ フェース 生成注入 クラス B
51.
© 2018 NTT
DATA Corporation 51 JUnitなどのテスティングフレー ムワーク上でDIコンテナを動か すのは難しい…。 DIコンテナ クラス A 利用 Bの実装クラス Bのインタ フェース 生成注入 クラス B JUnit テスト
52.
© 2018 NTT
DATA Corporation 52 しかし!
53.
© 2018 NTT
DATA Corporation 53 Springは、 結合テストを支援 するモジュールとして
54.
© 2018 NTT
DATA Corporation 54 Spring Test を 提供している。
55.
© 2018 NTT
DATA Corporation 55 Spring Testに 含まれる
56.
© 2018 NTT
DATA Corporation 56 Spring TestContext Framework(TCF) を用いると、
57.
© 2018 NTT
DATA Corporation 57 JUnitやTestNG などのテスティング フレームワーク上で
58.
© 2018 NTT
DATA Corporation 58 DIコンテナ を動かせる!
59.
© 2018 NTT
DATA Corporation 59 クラス A 利用 注入 クラスA, BがDIコンテナ上で正しく動作するか テストしたい。 生成 DIコンテナ Bの実装クラス Bのインタフェース クラス B
60.
© 2018 NTT
DATA Corporation 60 はじめに、pom.xmlにspring-testの ライブラリを追加する。 <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <scope>test</scope> </dependency>
61.
© 2018 NTT
DATA Corporation 61 次に、テストクラスでTestContext Framework (TCF)を使うよう指定する。※詳細はのちほど TestContext Framework クラス A 利用 テストクラス A Bの実装クラス Bのインタ フェース クラス B 1. TCFを使うよ!
62.
© 2018 NTT
DATA Corporation 62 また、TCF上にDIコンテナを作成するためのBean 定義ファイルを指定する。 TestContext Framework DIコンテナ クラス A 利用 テストクラス A Bの実装クラス Bのインタ フェース クラス B 1. TCFを使うよ! 2. このBean定義ファ イルをもとにDIコン テナを作成して!
63.
© 2018 NTT
DATA Corporation 63 注入 以上の簡単な設定で、テスティングフレームワーク上 でDIコンテナと連携したテストが可能になる! 生成 クラス A 利用 テストクラス A Bの実装クラス Bのインタ フェース クラス B TestContext Framework DIコンテナ 注入 生成 1. TCFを使うよ! 2. このBean定義ファ イルをもとにDIコン テナを作成して!
64.
© 2018 NTT
DATA Corporation 64 では、
65.
© 2018 NTT
DATA Corporation 65 Spring 5で何が 変わったのだろうか
66.
© 2018 NTT
DATA Corporation 66 Springとテスト クラスやメソッド単位でのテスト クラス同士を組み合わせたテスト Spring 5での変更点 JUnit 5のサポート テスト並行実行のサポート その他の改善 まとめ 目玉の改善!
67.
© 2018 NTT
DATA Corporation 67 Spring 5のSpring Testでは、 これからお話しする JUnit 5のメリットを
68.
© 2018 NTT
DATA Corporation 68 すべて享受すること ができます!
69.
© 2018 NTT
DATA Corporation 69 Springとテスト クラスやメソッド単位でのテスト クラス同士を組み合わせたテスト Spring 5での変更点 JUnit 5のサポート テスト並行実行のサポート その他の改善 まとめ ・ JUnitの説明 ・ JUnit 5の概要 ・ JUnit 5のイケてるところ ・ TCFとの連携方法
70.
© 2018 NTT
DATA Corporation 70 JUnitは、以下を提供している。 ・テストケースのフォーマット ・テストの実行基盤 ・テストの期待値と実測値の検証API JUnitの説明
71.
© 2018 NTT
DATA Corporation 71 簡単に言うと、 ・テストケースのフォーマット ⇒どのようにテストを書いて、 ・テストの実行基盤 ⇒どのように実行し、 ・テストの期待値と実測値の検証API ⇒どのように検証するか JUnitの説明
72.
© 2018 NTT
DATA Corporation 72 Springとテスト クラスやメソッド単位でのテスト クラス同士を組み合わせたテスト Spring 5での変更点 JUnit 5のサポート テスト並行実行のサポート その他の改善 まとめ ・ JUnitの説明 ・ JUnit 5の概要 ・ JUnit 5のイケてるところ ・ TCFとの連携方法
73.
© 2018 NTT
DATA Corporation 73 2017年、 JUnit 5の概要
74.
© 2018 NTT
DATA Corporation 74 JUnit 5が リリースされました。 JUnit 5の概要
75.
© 2018 NTT
DATA Corporation 75 実に10年ぶりの メジャーアップデート JUnit 5の概要
76.
© 2018 NTT
DATA Corporation 76 JUnit 5は、 3つのサブプロジェクトで 構成される。 JUnit 5 = Platform + Jupiter + Vintage JUnit 5の概要
77.
© 2018 NTT
DATA Corporation 77 JUnit 5の概要 Eclipse, STS, IntelliJ IDEA, Maven, Gradle etc. JUnit Platform JUnit Vintage JUnit Jupiter 3rd party JUnit 3,4の テスト JUnit 5の テスト その他の テスト 共通的な実行エンジン 実行API JUnit3, 4 実行エンジン 実装 API JUnit 5 実行エンジン
78.
© 2018 NTT
DATA Corporation 78 JUnit 5= JUnit Platform + JUnit Jupiter + JUnit Vintage 用途や環境に合わせて適切な ライブラリを取り込む。 JUnit 5の概要
79.
© 2018 NTT
DATA Corporation 79 サポートされる Javaのバージョンは、 Java 8 以上 JUnit 5の概要
80.
© 2018 NTT
DATA Corporation 80 Springとテスト クラスやメソッド単位でのテスト クラス同士を組み合わせたテスト Spring 5での変更点 JUnit 5のサポート テスト並行実行のサポート その他の改善 まとめ ・ JUnitの説明 ・ JUnit 5の概要 ・ JUnit 5のイケてるところ ・ TCFとの連携方法
81.
© 2018 NTT
DATA Corporation 81 JUnit 5はどこが イケてるの? JUnit 5のイケてるところ
82.
© 2018 NTT
DATA Corporation 82 JUnit 5のイケてるところ ・ネストしたテスト ・パラメータ化テスト ・アサーションAPIの強化 ・条件付きテスト JUnit 5のイケてるところ
83.
© 2018 NTT
DATA Corporation 83 これからお話しするJUnit 5 のAPIの中には、一部実験 的なものも含まれます。 JUnit 5のイケてるところ
84.
© 2018 NTT
DATA Corporation 84 JUnit 5のイケてるところ ・ネストしたテスト ・パラメータ化テスト ・アサーションAPIの強化 ・条件付きテスト JUnit 5のイケてるところ
85.
© 2018 NTT
DATA Corporation 85 網羅的にテストしようと すると、テストメソッドは 増えますよね? JUnit 5のイケてるところ: ネストしたテスト
86.
© 2018 NTT
DATA Corporation 86 大量のテストメソッドが 並列に 実装されていると、 JUnit 5のイケてるところ: ネストしたテスト
87.
© 2018 NTT
DATA Corporation 87 テストコードを見たときに 各テストケースの意図を 読み解くのが難しくなる。 JUnit 5のイケてるところ: ネストしたテスト
88.
© 2018 NTT
DATA Corporation 88 JUnit 5のイケてるところ: ネストしたテスト JUnit 4 ~並列で書いたとき~ @Before public void setUp() { // リストの初期化(0件) } @Test public void sizeメソッドの確認_リストが初期状態() { // 0が返されることの確認 } @Test public void sizeメソッドの確認_リストが1件() { // リストに1件追加 // 1が返されることの確認 } @Test public void isEmptyメソッドの確認_リストが初期状態() { // trueが返されることの確認 } @Test public void isEmptyメソッドの確認_リストが1件() { // リストに1件追加 // falseが返されることの確認 } 各テストケースの観点が 読み取りずらくなる 同じような初期化処理 が重複する 同じような初期化処理 が重複する
89.
© 2018 NTT
DATA Corporation 89 解決するためには、 JUnit 5のイケてるところ: ネストしたテスト
90.
© 2018 NTT
DATA Corporation 90 テストメソッドを何らか の基準でグループ化 する必要がある。 JUnit 5のイケてるところ: ネストしたテスト
91.
© 2018 NTT
DATA Corporation 91 JUnit 実践入門 によると、 JUnit 5のイケてるところ: ネストしたテスト
92.
© 2018 NTT
DATA Corporation 92 「テストケースは共通の 初期化処理をもつもの でグループ化すべき」 JUnit 5のイケてるところ: ネストしたテスト
93.
© 2018 NTT
DATA Corporation 93 とあります。 JUnit 5のイケてるところ: ネストしたテスト
94.
© 2018 NTT
DATA Corporation 94 JUnit 4では、 JUnit 5のイケてるところ: ネストしたテスト
95.
© 2018 NTT
DATA Corporation 95 @RunWith(Enclosed.class) を利用して 次のように書けた。 JUnit 5のイケてるところ: ネストしたテスト
96.
© 2018 NTT
DATA Corporation 96 JUnit 5のイケてるところ: ネストしたテスト JUnit 4 ~グループ化~ @RunWith(Enclosed.class) public class ListTestEnclosedExmaple { public static class リストが初期状態 { @Before public void setUp() {} //リストの初期化(0件) @Test public void sizeメソッドの確認() {} @Test public void isEmptyメソッドの確認() {} } public static class リストが1件 { @Before public void setUp() {} //リストの初期化後、1件追加 @Test public void sizeメソッドの確認() {} @Test public void isEmptyメソッドの確認() {} } } アウタークラスに @RunWith (Enclosed.class) を付与する。
97.
© 2018 NTT
DATA Corporation 97 JUnit 5のイケてるところ: ネストしたテスト JUnit 4 ~グループ化~ @RunWith(Enclosed.class) public class ListTestEnclosedExmaple { public static class リストが初期状態 { @Before public void setUp() {} //リストの初期化(0件) @Test public void sizeメソッドの確認() {} @Test public void isEmptyメソッドの確認() {} } public static class リストが1件 { @Before public void setUp() {} //リストの初期化後、1件追加 @Test public void sizeメソッドの確認() {} @Test public void isEmptyメソッドの確認() {} } } staticインナークラスで、 同じ初期化処理が必要な テストケースをグループ化。 staticインナークラスで、 同じ初期化処理が必要な テストケースをグループ化。
98.
© 2018 NTT
DATA Corporation 98 staticなので、 アウタークラスのメンバに アクセスできない。 JUnit 5のイケてるところ: ネストしたテスト
99.
© 2018 NTT
DATA Corporation 99 JUnit 5のイケてるところ: ネストしたテスト @RunWith(Enclosed.class) public class ListTestEnclosedExmaple { @Before public void setUp() {} //リストの初期化(0件) public static class リストが初期状態 { @Test public void sizeメソッドの確認() {} @Test public void isEmptyメソッドの確認() {} } public static class リストが1件 { @Before public void setUp() {} //リストに1件追加 @Test public void sizeメソッドの確認() {} @Test public void isEmptyメソッドの確認() {} } } このように、全体的な初期 化処理をアウタークラスに 書けばもっとスッキリしそう だけど、制約上できない。 JUnit 4 ~仕様上の制約~
100.
© 2018 NTT
DATA Corporation 100 JUnit 5では そのような実装が 可能になる! JUnit 5のイケてるところ: ネストしたテスト
101.
© 2018 NTT
DATA Corporation 101 JUnit 5の新API @Nested を使うと、 ※@RunWith(Enclosed.class)は廃止。 JUnit 5のイケてるところ: ネストしたテスト
102.
© 2018 NTT
DATA Corporation 102 JUnit 5のイケてるところ: ネストしたテスト JUnit 5 ~ネスト化~ class ListTestNestedExample { @BeforeEach void setUp() {} //リストの初期化(0件) @Nested class リストが初期状態 { @Test void sizeメソッドの確認() {} @Test void isEmptyメソッドの確認() {} } @Nested class リストが1件 { @BeforeEach void setUp() {} //リストに1件追加 @Test void sizeメソッドの確認() {} @Test void isEmptyメソッドの確認() {} } } 非staticインナークラスに @Nestedアノテーションを付 与し、同じ初期化処理が必 要なテストケースをグループ化 (深さ1でネスト化)。
103.
© 2018 NTT
DATA Corporation 103 JUnit 5のイケてるところ: ネストしたテスト JUnit 5 ~ネスト化~ class ListTestNestedExample { @BeforeEach void setUp() {} //リストの初期化(0件) @Nested class リストが初期状態 { @Test void sizeメソッドの確認() {} @Test void isEmptyメソッドの確認() {} } @Nested class リストが1件 { @BeforeEach void setUp() {} //リストに1件追加 @Test void sizeメソッドの確認() {} @Test void isEmptyメソッドの確認() {} } } Tips: JUnit 5の変更点 ①public修飾子が省略可 能 Tips: JUnit 5の変更点① クラスやメソッドのpublic修飾子 が省略可能になった。
104.
© 2018 NTT
DATA Corporation 104 JUnit 5のイケてるところ: ネストしたテスト JUnit 5 ~ネスト化~ class ListTestNestedExample { @BeforeEach void setUp() {} //リストの初期化(0件) @Nested class リストが初期状態 { @Test void sizeメソッドの確認() {} @Test void isEmptyメソッドの確認() {} } @Nested class リストが1件 { @BeforeEach void setUp() {} //リストに1件追加 @Test void sizeメソッドの確認() {} @Test void isEmptyメソッドの確認() {} } } Tips: JUnit 5の変更点② 前処理/後処理アノテーションが変 わった。 @Before/After ⇒@BeforeEach/AfterEach @BeforeClass/AfterClass ⇒@BeforeAll/AfterAll
105.
© 2018 NTT
DATA Corporation 105 JUnit 5のイケてるところ: ネストしたテスト @Nested class A{ @Nested class B{ @Nested class C{ } } } JUnit 5 ~ネスト化~ ネストはいくらでも深くすることができ、 継承関係を保ったままテストケース を構造化できる!
106.
© 2018 NTT
DATA Corporation 106 JUnit 5のイケてるところ ・ネストしたテスト ・パラメータ化テスト ・アサーションAPIの強化 ・条件付きテスト JUnit 5のイケてるところ
107.
© 2018 NTT
DATA Corporation 107 テストケースが 大量になった場合、 JUnit 5のイケてるところ: パラメータ化テスト
108.
© 2018 NTT
DATA Corporation 108 初期化処理ごとに テストメソッドをグループ化 するだけではなく、 JUnit 5のイケてるところ: パラメータ化テスト
109.
© 2018 NTT
DATA Corporation 109 引数のバリエーション テストを一つのテスト メソッドで書けると、 JUnit 5のイケてるところ: パラメータ化テスト
110.
© 2018 NTT
DATA Corporation 110 もっと見通しが良くなる。 JUnit 5のイケてるところ: パラメータ化テスト
111.
© 2018 NTT
DATA Corporation 111 JUnit 4では、 JUnit 5のイケてるところ: パラメータ化テスト
112.
© 2018 NTT
DATA Corporation 112 @RunWith(Theories.class) を利用して それが実現できた。 JUnit 5のイケてるところ: パラメータ化テスト
113.
© 2018 NTT
DATA Corporation 113 JUnit 5のイケてるところ: パラメータ化テスト JUnit 4 ~パラメータ化していない例~ public class NonParameterizedExample { //ageCheckメソッドに未成年の年齢を渡したときのテスト @Test public void ageCheckメソッド_0歳() {} @Test public void ageCheckメソッドの確認_10歳() {} @Test public void ageCheckメソッドの確認_19歳() {} } 入力値のバリエーションテス トをメソッドごとに書いている。
114.
© 2018 NTT
DATA Corporation 114 JUnit 5のイケてるところ: パラメータ化テスト JUnit 4 ~パラメータ化後~ @RunWith(Theories.class) public class ParameterizedExample { @DataPoints("child") public static int[] VALUES_CHILD = { 0, 10, 19 }; @Theory public void ageCheckメソッドの確認_未成年( @FromDataPoints("child") int age) {} } アウタークラスに @RunWith(Theories.class) を付与する。
115.
© 2018 NTT
DATA Corporation 115 JUnit 5のイケてるところ: パラメータ化テスト JUnit 4 ~パラメータ化後~ @RunWith(Theories.class) public class ParameterizedExample { @DataPoints("child") public static int[] VALUES_CHILD = { 0, 10, 19 }; @Theory public void ageCheckメソッドの確認_未成年( @FromDataPoints("child") int age) {} } テスト対象メソッドの戻り値が同値なテス トケースをひとまとめにし、引数をもつテス トメソッドを作成する。(パラメータ化) メソッドには@Theoryを付与する。
116.
© 2018 NTT
DATA Corporation 116 JUnit 5のイケてるところ: パラメータ化テスト JUnit 4 ~パラメータ化後~ @RunWith(Theories.class) public class ParameterizedExample { @DataPoints("child") public static int[] VALUES_CHILD = { 0, 10, 19 }; @Theory public void ageCheckメソッドの確認_未成年( @FromDataPoints("child") int age) {} } 入力パラメータは、staticな変数に @DataPointsを付与して定義する。
117.
© 2018 NTT
DATA Corporation 117 JUnit 5では さらに簡潔に、 高機能になった! JUnit 5のイケてるところ: パラメータ化テスト
118.
© 2018 NTT
DATA Corporation 118 JUnit 5の新API @ParameterizedTest を使うと、 ※@RunWith(Theories.class)は廃止。 JUnit 5のイケてるところ: パラメータ化テスト
119.
© 2018 NTT
DATA Corporation 119 JUnit 5のイケてるところ: パラメータ化テスト class ParameterizedExampleJunit5 { @ParameterizedTest @ValueSource(ints = { 0, 10, 19 }) void ageCheckメソッドの確認_未成年(int age) {} } パラメータ化したいテストメソッドに @ParameterizedTestを付与する。 JUnit 5 ~パラメータ化~
120.
© 2018 NTT
DATA Corporation 120 JUnit 5のイケてるところ: パラメータ化テスト class ParameterizedExampleJunit5 { @ParameterizedTest @ValueSource(ints = { 0, 10, 19 }) void ageCheckメソッドの確認_未成年(int age) {} } 入力パラメータは、テストメソッドに付 与した@ValueSourceで定義する。 JUnit 5 ~パラメータ化~
121.
© 2018 NTT
DATA Corporation 121 JUnit 5のイケてるところ: パラメータ化テスト Double, int, long, String変数を指定 @ValueSource(double[], int[], long[], String[]) Enum定数を指定 @EnumSource(Enumクラス) Streamや配列を返 すメソッドを指定 @MethodSource(“メソッド名”) CSV形式で値を指定 @CsvSource({“x1,y1”, “x2,y2”}) CSVファイルを指定 @CsvFileSource(resources=“CSVファイル名”) JUnit 5 ~パラメータ化~ Tips: 以下のようなパラメータ定義アノテー ションが提供されている。
122.
© 2018 NTT
DATA Corporation 122 パラメータ化テストのAPIは、 2018/10/31現在、実験的 なAPIとして提供されている。 JUnit 5のイケてるところ: パラメータ化テスト
123.
© 2018 NTT
DATA Corporation 123 JUnit 5のイケてるところ ・ネストしたテスト ・パラメータ化テスト ・アサーションAPIの強化 ・条件付きテスト JUnit 5のイケてるところ
124.
© 2018 NTT
DATA Corporation 124 アサーションに関しても 進化した! JUnit 5のイケてるところ: アサーションAPIの強化
125.
© 2018 NTT
DATA Corporation 125 新しいAPIの追加 ・assertAll() ・assertThrows() ・assertTimeout() など JUnit 5のイケてるところ: アサーションAPIの強化
126.
© 2018 NTT
DATA Corporation 126 JUnit 5のイケてるところ: アサーションAPIの強化 JUnit 5 ~assertAll()~ バグを仕込んだPersonクラス public class Person { public String getFirstName() { return ""; } public String getLastName() { return "Hirakuri"; } public String getAge() { return ""; } } “Yuto”を返したい。 “29”を返したい。
127.
© 2018 NTT
DATA Corporation 127 JUnit 5のイケてるところ: アサーションAPIの強化 @Test void person情報が正しく取得できているか確認() { assertEquals("Yuto", person.getFirstName()); assertEquals("Hirakuri", person.getLastName()); assertEquals("29", person.getAge()); } JUnit 5 ~assertAll()~ 今まで
128.
© 2018 NTT
DATA Corporation 128 JUnit 5のイケてるところ: アサーションAPIの強化 一番最初のアサーションで失敗すると、 以後のアサーションが実行されない。 JUnit 5 ~assertAll()~
129.
© 2018 NTT
DATA Corporation 129 JUnit 5のイケてるところ: アサーションAPIの強化 JUnit 5 ~assertAll()~ assertAll()使用 @Test void person情報が正しく取得できているか確認_All() { assertAll( () -> assertEquals(“Yuto”, person.getFirstName()), () -> assertEquals(“Hirakuri”, person.getLastName()), () -> assertEquals("29", person.getAge()) ); }
130.
© 2018 NTT
DATA Corporation 130 JUnit 5のイケてるところ: アサーションAPIの強化 JUnit 5 ~assertAll()~ 一番最初のアサーションで失敗しても、 最後のアサーションまで実行される!
131.
© 2018 NTT
DATA Corporation 131 JUnit 5のイケてるところ: アサーションAPIの強化 public class Calculator { public String divide(String a, String b) { return String.valueOf(Integer.parseInt(a) / Integer.parseInt(b)); } } JUnit 5 ~assertThrows()~ 割り算をするdivideメソッド
132.
© 2018 NTT
DATA Corporation 132 JUnit 5のイケてるところ: アサーションAPIの強化 今まで @Test(expected = ArithmeticException.class) public void ゼロ除算時に算術例外の発生確認() { calc.divide("5", "0"); } @Testのexpected 属性に例外クラスを指 定して確認していた。 JUnit 5 ~assertThrows()~
133.
© 2018 NTT
DATA Corporation 133 JUnit 5のイケてるところ: アサーションAPIの強化 assertThrows()使用 @Test void ゼロ除算時に算術例外の発生確認() { assertThrows(ArithmeticException.class, () -> calc.divide("5", "0")); } メソッド内で自然なスタ イルで書ける。 JUnit 5 ~assertThrows()~
134.
© 2018 NTT
DATA Corporation 134 JUnit 5のイケてるところ: アサーションAPIの強化 今まで JUnit 5 ~assertThrows()~ @Test public void ゼロ除算時の算術例外メッセージ確認() { try { calc.divide("5", "0"); fail(); } catch (ArithmeticException e) { assertEquals("/ by zero", e.getMessage()); } } 例外メッセージを確認す るときは、try-catchを 使って書いていた。
135.
© 2018 NTT
DATA Corporation 135 JUnit 5のイケてるところ: アサーションAPIの強化 assertThrows()使用 JUnit 5 ~assertThrows()~ @Test void ゼロ除算時の算術例外メッセージ確認() { Throwable e = assertThrows( ArithmeticException.class, () -> calc.divide("5", "0")); assertEquals("/ by zero", e.getMessage()); } Throwableオブジェクト を返すので、try-catch を使わずに書ける!
136.
© 2018 NTT
DATA Corporation 136 assertThat()がJUnitライブラリから 削除されました。 背景: JUnit 5から「Matcherは、ユーザが自由に選んでね」 というスタンスをとっているため、HamcrestのMatcher依存 であったassertThat()も切り離された。 https://github.com/junit-team/junit5/wiki/OLD-Assertion-API#reasons-not-to-introduce-yet-another-assertion-apilibrary ⇒JUnit 5でassertThat()を使いたい場合は、 Hamcrestライブラリを使えばOK! JUnit 5のイケてるところ: アサーションAPIの強化 補足
137.
© 2018 NTT
DATA Corporation 137 JUnit 5のイケてるところ ・ネストしたテスト ・パラメータ化テスト ・アサーションAPIの強化 ・条件付きテスト JUnit 5のイケてるところ
138.
© 2018 NTT
DATA Corporation 138 あるテストケースを 一時的に無効にしたい時、 JUnit 5のイケてるところ: 条件付きテスト
139.
© 2018 NTT
DATA Corporation 139 JUnit 4 @Ignore JUnit 5のイケてるところ: 条件付きテスト JUnit 5 @Disabled
140.
© 2018 NTT
DATA Corporation 140 JUnit 5は それだけではない。 JUnit 5のイケてるところ: 条件付きテスト
141.
© 2018 NTT
DATA Corporation 141 条件に応じて 有効/無効にできる! JUnit 5のイケてるところ: 条件付きテスト
142.
© 2018 NTT
DATA Corporation 142 JUnit 5のイケてるところ: 条件付きテスト JUnit 5 ~条件付きテスト実行~ class OSExmaple { @Test @EnabledOnOs({ OS.WINDOWS }) @EnabledOnJre({ JRE.JAVA_8, JRE.JAVA_9 }) void windowsかつJREバージョンが8か9でのみ実行() {} } 実行環境ごとにテストケースを 有効/無効にできる!
143.
© 2018 NTT
DATA Corporation 143 JUnit 5のイケてるところ: 条件付きテスト OSを条件に有効/無効 @EnabledOnOs(OS.WINDOWS) @DisabledOnOs({OS.LINUX, OS.MAC}) Java実行環境を条件に 有効/無効 @EnabledOnJre(JRE.JAVA_8) @DisabledOnJre({JRE.JAVA_9, JRE.JAVA_10}) JVMシステムプロパティを条 件に有効/無効 @EnabledIfSystemProperty(named = "os.arch", matches = ".*64.*") @DisabledIfSystemProperty(named = "ci-server", matches = "true") 環境変数を条件に有効/ 無効 @EnabledIfEnvironmentVariable(named = "ENV", matches = "staging-server") @DisabledIfEnvironmentVariable(named = "ENV", matches = ".*development.*") JUnit 5 ~条件付きテスト実行~
144.
© 2018 NTT
DATA Corporation 144 JUnit 5のイケてるところ ・ネストしたテスト ・パラメータ化テスト ・アサーションAPIの強化 ・条件付きテスト JUnit 5のイケてるところ
145.
© 2018 NTT
DATA Corporation 145 そんなイケてる JUnit 5ですが、
146.
© 2018 NTT
DATA Corporation 146 Spring TestContext Framework と連携するにあたっては
147.
© 2018 NTT
DATA Corporation 147 ドラスティックな 仕様変更がありました。
148.
© 2018 NTT
DATA Corporation 148 JUnitの拡張方法が一本化 Runner (@RunWith) Rule (@Rule) ClassRule (@ClassRule) Extension (@ExtendWith) JUnit 4 JUnit 5
149.
© 2018 NTT
DATA Corporation 149 今までは、JUnit上でSpring TestContext Frameworkを動作させるために、Runnerを使 用していた。 import org.junit.runner.RunWith; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = AppConfig.class) public class ABIntegrationTestJUnit4 { } Spring Testから提供されている SpringJUnit4ClassRunnerを @RunWithで指定。
150.
© 2018 NTT
DATA Corporation 150 JUnit 5からは同様の 手段が取れなくなって しまいましたが、
151.
© 2018 NTT
DATA Corporation 151 Spring 5の Spring Testでは、 仕様変更に追従!
152.
© 2018 NTT
DATA Corporation 152 JUnit 5が提供している Extensionを利用して、
153.
© 2018 NTT
DATA Corporation 153 JUnit 5上で TCFを動かすための サポートクラスを提供!
154.
© 2018 NTT
DATA Corporation 154 Springとテスト クラスやメソッド単位でのテスト クラス同士を組み合わせたテスト Spring 5での変更点 JUnit 5のサポート テスト並行実行のサポート その他の改善 まとめ ・ JUnitの説明 ・ JUnit 5の概要 ・ JUnit 5のイケてるところ ・ TCFとの連携方法
155.
© 2018 NTT
DATA Corporation 155 JUnit 5上でSpring TestContext Framework を動かすための設定方法(ベーシックな方法) import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.context.ContextConfiguration; import org.springframework.test.context.junit.jupiter.SpringExtension; @ExtendWith(SpringExtension.class) @ContextConfiguration(classes = AppConfig.class) class ABIntegrationTest { } @ExtendWithのvalue属性 に、JUnit 5上でTCFを動かす ためのExtensionクラスを指定 する。
156.
© 2018 NTT
DATA Corporation 156 JUnit 5上でSpring TestContext Framework を動かすための設定方法(ベーシックな方法) import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.context.ContextConfiguration; import org.springframework.test.context.junit.jupiter.SpringExtension; @ExtendWith(SpringExtension.class) @ContextConfiguration(classes = AppConfig.class) class ABIntegrationTest { } @ContextConfigurationの classes属性に、DIコンテナを 作成する際のBean定義ファイ ルを指定する。
157.
© 2018 NTT
DATA Corporation 157 import org.springframework.test.context.junit.jupiter.SpringJUnitConfig; @SpringJUnitConfig(classes = AppConfig.class) class ABIntegrationTest { } @SpringJUnitConfig = @ExtendWith(SpringExtension.class)+ @ContextConfiguration Tip: Webアプリ向けのDIコンテナを作成する、@SpringJUnitWebConfigも提供されている。 (@SpringJUnitWebConfig=@SpringJUnitConfig + @WebApplicationConfig) JUnit 5上でSpring TestContext Framework を動かすための設定方法(@SpringJUnitConfig)
158.
© 2018 NTT
DATA Corporation 158 JUnit 5には実験的なAPI が数多く存在するので、 使用の際は注意。 https://junit.org/junit5/docs/current/user-guide/#api-evolution-experimental-apis
159.
© 2018 NTT
DATA Corporation 159 Springとテスト クラスやメソッド単位でのテスト クラス同士を組み合わせたテスト Spring 5での変更点 JUnit 5のサポート テスト並行実行のサポート その他の改善 まとめ
160.
© 2018 NTT
DATA Corporation 160 JUnit 4.7/5.3以降、 テストの並行実行が 可能になったが、 Spring 5変更点:テスト並行実行のサポート
161.
© 2018 NTT
DATA Corporation 161 Spring 4では、 TCFを使用したテストは 並行実行できなかった。 Spring 5変更点:テスト並行実行のサポート
162.
© 2018 NTT
DATA Corporation 162 Spring 5からは、 TCFを使用したテストも 並行実行が可能になった! Spring 5変更点:テスト並行実行のサポート
163.
© 2018 NTT
DATA Corporation 163 MavenでJUnit 5テストの並行実行をする設定例 Spring 5変更点:テスト並行実行のサポート <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.22.0</version> <configuration> <properties> <configurationParameters> junit.jupiter.execution.parallel.enabled=true junit.jupiter.execution.parallel.config.strategy=fixed junit.jupiter.execution.parallel.config.fixed.parallelism=20 </configurationParameters> </properties> <reportFormat>plain</reportFormat> </configuration> <dependencies> <dependency> <groupId>org.junit.platform</groupId> <artifactId>junit-platform-surefire-provider</artifactId> <version>1.3.1</version> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> <version>5.3.1</version> </dependency> </dependencies> </plugin> maven-surefire-pluginの configurationParametersに以下を設定 ・enabled=true (有効) ・parallelism=20 (同時スレッド数) ・strategy=fixed (スレッド数固定)
164.
© 2018 NTT
DATA Corporation 164 MavenでJUnit 5テストの並行実行をする設定例 Spring 5変更点:テスト並行実行のサポート <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.22.0</version> <configuration> <properties> <configurationParameters> junit.jupiter.execution.parallel.enabled=true junit.jupiter.execution.parallel.config.strategy=fixed junit.jupiter.execution.parallel.config.fixed.parallelism=20 </configurationParameters> </properties> <reportFormat>plain</reportFormat> </configuration> <dependencies> <dependency> <groupId>org.junit.platform</groupId> <artifactId>junit-platform-surefire-provider</artifactId> <version>1.3.1</version> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> <version>5.3.1</version> </dependency> </dependencies> </plugin> JUnit 5.3から試験的に並行実行をサポー トしている。
165.
© 2018 NTT
DATA Corporation 165 Spring 5変更点:テスト並行実行のサポート 実行してみる。 @SpringJUnitConfig(classes = AppConfig.class) class TestingTimeTest { @Test void テスト001() throws InterruptedException { Thread.sleep(1000); } @Test void テスト002() throws InterruptedException {} ・・・ @Test void テスト020() throws InterruptedException {} 実行に1秒かかる テストケースを20個用意 Spring TestContext Frameworkを 使用する。
166.
© 2018 NTT
DATA Corporation 166 Spring 5変更点:テスト並行実行のサポート 20スレッドで並行実行した結果 並行実行通常実行 20.8秒 1.7秒 12倍の高速化!
167.
© 2018 NTT
DATA Corporation 167 以下の場合は、並行実行NG! ・@DirtiesContextでテストメソッド実 行後にApplicationContextのキャッ シュを破棄している場合 ・@FixMethodOrderでテストメソッドの 実行順序を指定している場合 ・テストケースがDBやファイルシステムの状 態に依存する場合 Spring 5変更点:テスト並行実行のサポート
168.
© 2018 NTT
DATA Corporation 168 Springとテスト クラスやメソッド単位でのテスト クラス同士を組み合わせたテスト Spring 5での変更点 JUnit 5のサポート テスト並行実行のサポート その他の改善 まとめ
169.
© 2018 NTT
DATA Corporation 169 JUnitの前処理の直後、後処 理の直前で呼び出されるコール バックメソッドが追加された MockMVCを利用したテスト の結果にリクエストBODYが出 力できるようになった MockMVC利用時に「リダイレ クト先URL」と「フォワード先 URL」を検証する際に、期待値 にURIテンプレートを指定でき るようになった XMLUnit 2.3のサポート Spring 5変更点: その他の改善 https://github.com/spring-projects/spring-framework/wiki/What's-New-in-Spring-Framework-5.x#testing-improvements
170.
© 2018 NTT
DATA Corporation 170 Springとテスト クラスやメソッド単位でのテスト クラス同士を組み合わせたテスト Spring 5での変更点 JUnit 5のサポート テスト並行実行のサポート その他の改善 まとめ
171.
© 2018 NTT
DATA Corporation 171 Springは テストがしやすい!
172.
© 2018 NTT
DATA Corporation 172 Spring 5で さらにテスト しやすくなった!
173.
© 2018 NTT
DATA Corporation 173 Springはテストでも、 最先端技術に 追従している!
174.
© 2018 NTT
DATA Corporation 174 アプリケーション開発 をするならSpring!
175.
© 2018 NTT
DATA Corporation
176.
© 2018 NTT
DATA Corporation 176 * https://qiita.com/kazuki43zoo/items/4a9ead225a9a9897af4a * http://www.atmarkit.co.jp/ait/articles/0504/29/news022_3.html * https://qiita.com/hshimo/items/1136087e1c6e5c5b0d9f * https://github.com/spring-projects/spring-framework/wiki/What%27s-New-in-Spring-Framework-5.x * https://www.infoq.com/jp/news/2017/10/junit5-released * https://speakerdeck.com/rshindo/jjug-ccc-2018-spring * https://oohira.github.io/junit5-doc-jp/user-guide/ * https://github.com/spring-projects/spring-framework/wiki/What%27s-New-in-Spring-Framework-5.x * https://dev.classmethod.jp/testing/unittesting/junit-dynamic-test-case-using-runner/ * https://developer.ibm.com/dwblog/2017/best-new-features-junit-5/ * https://mike-neck.hatenadiary.com/entry/2017/01/01/160244 * https://www.oracle.com/webfolder/technetwork/jp/javamagazine/Java-MJ16-JUnit5.pdf * https://www.slideshare.net/OgawaTakeshi/spring-tdd?ref=http://springfest2017.springframework.jp/ * https://gihyo.jp/dev/serial/01/tdd/0012 * https://www.slideshare.net/uesaka/build-insider-moqfakes * https://qiita.com/1000k/items/aef6aed46b0fc34cc15e * http://acro-engineer.hatenablog.com/entry/2017/12/07/120000 * https://speakerdeck.com/irof/dousiyoujunit5 * https://dev.classmethod.jp/testing/unittesting/where-is-junit5-aheaded/ * https://www.youtube.com/watch?v=h0Idcz71Aog * http://www.ne.jp/asahi/hishidama/home/tech/java/junit/5/assertion.html * Spring徹底入門 * JUnit実践入門 参考文献
Download now