Enviar pesquisa
Carregar
Spring 歴約1年初心者の Test 奮闘記
•
2 gostaram
•
3,226 visualizações
C
chishizu naito
Seguir
2019/4/25 JSUG勉強会 2019その4 初心者による初心者のSpring入門
Leia menos
Leia mais
Engenharia
Denunciar
Compartilhar
Denunciar
Compartilhar
1 de 57
Baixar agora
Baixar para ler offline
Recomendados
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
Hiroshi Tokumaru
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
Masatoshi Tada
劇的改善 Ci4時間から5分へ〜私がやった10のこと〜
劇的改善 Ci4時間から5分へ〜私がやった10のこと〜
aha_oretama
怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション
土岐 孝平
例外設計における大罪
例外設計における大罪
Takuto Wada
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
これからSpringを使う開発者が知っておくべきこと
これからSpringを使う開発者が知っておくべきこと
土岐 孝平
Observableで非同期処理
Observableで非同期処理
torisoup
Recomendados
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
Hiroshi Tokumaru
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
Masatoshi Tada
劇的改善 Ci4時間から5分へ〜私がやった10のこと〜
劇的改善 Ci4時間から5分へ〜私がやった10のこと〜
aha_oretama
怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション
土岐 孝平
例外設計における大罪
例外設計における大罪
Takuto Wada
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
これからSpringを使う開発者が知っておくべきこと
これからSpringを使う開発者が知っておくべきこと
土岐 孝平
Observableで非同期処理
Observableで非同期処理
torisoup
Laravelでfacadeを使わない開発
Laravelでfacadeを使わない開発
Kenjiro Kubota
TDD のこころ @ OSH2014
TDD のこころ @ OSH2014
Takuto Wada
さくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組み
Takeshi Ogawa
Cognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しよう
Shuto Suzuki
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
Taku Miyakawa
JIRA / Confluence の必須プラグインはこれだ
JIRA / Confluence の必須プラグインはこれだ
Narichika Kajihara
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
onozaty
分散トレーシングAWS:X-Rayとの上手い付き合い方
分散トレーシングAWS:X-Rayとの上手い付き合い方
Recruit Lifestyle Co., Ltd.
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
Koichi Tanaka
トランザクションスクリプトのすすめ
トランザクションスクリプトのすすめ
pospome
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
Yoji Kanno
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
今こそ知りたいSpring Web(Spring Fest 2020講演資料)
今こそ知りたいSpring Web(Spring Fest 2020講演資料)
NTT DATA Technology & Innovation
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
Y Watanabe
ワタシはSingletonがキライだ
ワタシはSingletonがキライだ
Tetsuya Kaneuchi
Mavenの真実とウソ
Mavenの真実とウソ
Yoshitaka Kawashima
TDD のこころ
TDD のこころ
Takuto Wada
JavaScriptの仕組みと未来のJavaScript ~ESNextとは~
JavaScriptの仕組みと未来のJavaScript ~ESNextとは~
Yuki Hirano
こわくない Git
こわくない Git
Kota Saito
イベント・ソーシングを知る
イベント・ソーシングを知る
Shuhei Fujita
Mais conteúdo relacionado
Mais procurados
Laravelでfacadeを使わない開発
Laravelでfacadeを使わない開発
Kenjiro Kubota
TDD のこころ @ OSH2014
TDD のこころ @ OSH2014
Takuto Wada
さくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組み
Takeshi Ogawa
Cognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しよう
Shuto Suzuki
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
Taku Miyakawa
JIRA / Confluence の必須プラグインはこれだ
JIRA / Confluence の必須プラグインはこれだ
Narichika Kajihara
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
onozaty
分散トレーシングAWS:X-Rayとの上手い付き合い方
分散トレーシングAWS:X-Rayとの上手い付き合い方
Recruit Lifestyle Co., Ltd.
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
Koichi Tanaka
トランザクションスクリプトのすすめ
トランザクションスクリプトのすすめ
pospome
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
Yoji Kanno
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
今こそ知りたいSpring Web(Spring Fest 2020講演資料)
今こそ知りたいSpring Web(Spring Fest 2020講演資料)
NTT DATA Technology & Innovation
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
Y Watanabe
ワタシはSingletonがキライだ
ワタシはSingletonがキライだ
Tetsuya Kaneuchi
Mavenの真実とウソ
Mavenの真実とウソ
Yoshitaka Kawashima
TDD のこころ
TDD のこころ
Takuto Wada
JavaScriptの仕組みと未来のJavaScript ~ESNextとは~
JavaScriptの仕組みと未来のJavaScript ~ESNextとは~
Yuki Hirano
こわくない Git
こわくない Git
Kota Saito
イベント・ソーシングを知る
イベント・ソーシングを知る
Shuhei Fujita
Mais procurados
(20)
Laravelでfacadeを使わない開発
Laravelでfacadeを使わない開発
TDD のこころ @ OSH2014
TDD のこころ @ OSH2014
さくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組み
Cognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しよう
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
JIRA / Confluence の必須プラグインはこれだ
JIRA / Confluence の必須プラグインはこれだ
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
分散トレーシングAWS:X-Rayとの上手い付き合い方
分散トレーシングAWS:X-Rayとの上手い付き合い方
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
トランザクションスクリプトのすすめ
トランザクションスクリプトのすすめ
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
今こそ知りたいSpring Web(Spring Fest 2020講演資料)
今こそ知りたいSpring Web(Spring Fest 2020講演資料)
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ワタシはSingletonがキライだ
ワタシはSingletonがキライだ
Mavenの真実とウソ
Mavenの真実とウソ
TDD のこころ
TDD のこころ
JavaScriptの仕組みと未来のJavaScript ~ESNextとは~
JavaScriptの仕組みと未来のJavaScript ~ESNextとは~
こわくない Git
こわくない Git
イベント・ソーシングを知る
イベント・ソーシングを知る
Spring 歴約1年初心者の Test 奮闘記
1.
Spring 歴約1年初⼼者の Test 奮闘記 タグバンガーズ
内藤
2.
• 内藤 千静 所属:株式会社タグバンガーズ •
Spring 歴 1年弱くらい • Java 歴4,5年くらい ⾃⼰紹介
3.
奮闘⼀覧 1.JUnit奮闘記 2.Mockito奮闘記 3.SpringRunner奮闘記 1.springRunnerでControllerのテスト 2.springRunnerでrepositoryのテスト 4.まとめ
4.
JUnit奮闘記
5.
研修も終わり、実務を始めてから数⽇ そろそろ、Unit Testも実装していきたいよね。 testのプログラムを書くんだよ。 まあとりあえず、やりながら説明するよ。 Unit Test?(って単体テストだよな…?実装っ て?) え?(書くって何だ。) よくわかんないけどわかりました。 Unit
Testを書くにあたってJUnitを使ってくね。 はい?(またよくわからん英語出てきた。)
6.
くそだる…
7.
そして私がどれくらいTestの知識がなかったかというと… こいつ
8.
Unit Testと仲良くなる為には彼を知るところから 始めなければいけない(ついでにJUnitも)🧐
9.
Unit Testについて調べてみたらこんなことがわかりました • 作成したコードが要件を満たしているか確認するもの •
プロダクションコードに書かれた処理がユニットテストに提⽰され るため、プロダクションコードの理解を助けてくれる • ⼀度書いてしまえば、⼿軽に何度でもテストを⾏うことができます。
10.
そしてJUnitではこんなことができるらしい…!!
11.
⼀度書いてしまえば、 何度でも使いまわせる、、、だと!? しかも⾃動化される、、、!??
12.
このクラスのtestコードを書け!! • getWordメソッドが呼ばれた際に想 定している値が返ってくるか
13.
• getWord()の引数1を指定した場合 に”いえーい”が返ってくる • getWord()の引数2を指定した場合 に”元気ー??”が返ってくる •
上記以外の引数を渡した場合 に”1or2を⼊⼒して下さい”が返っ てくるか
14.
実際に⾊々調べながら書いた結果がこちら assertThat()を使⽤して想定した値が 返ってくるか確認
15.
あれ?割と余裕じゃね…? 👏👏👏
16.
Mockitoテストでの奮闘記
17.
UnitTestを知り、余裕をこいていたある⽇ この修正のテスト書ける? ほいじゃよろしく👍 それ依存されてるクラスを mockしなきゃテスト難しいかも 書けます(余裕だわ) 承知です!! ……??なんかエラーがでまくってて上⼿くテ ストが動かないです。。 mock? mockito使ってやればいけるよ(^ω^)
18.
mockitoって?
19.
MockitoJUnitRunner ※mockを簡単に使えるように⼿助けしてくれるライブラリの⼀つです。 JUnit単体ではmock Testを⾏うことが不可能なため、 mockライブラリーを使⽤する必要があります。 使⽤する際はいい感じに何かしてくれる おまじないの@RunWithに MockitoJunitRunnner.classを指定すると使える ※テストを⾏う際に依存しているクラスを装ってそれっぽく動いてくれる便利な機能
20.
mockを使わなきゃいけない場⾯って?
21.
1. 検証したいクラスは完成済みでテストしたいんだけど、クラスの中で 利⽤している別クラスが未完成の場合 2. 異常系の動作確認を⾏う場合 3.
⻑々と依存しているクラスのnewをおこなうのが⾯倒な場合 4. 外部との連携を⾏うクラスの依存がある場合
22.
この機能を使って実装してみよー
23.
今回は未完成のクラスがあった場合のtest
24.
Constructorを少し変更
25.
テスト
26.
プルリクダメ出し @InjectMocksを使⽤して書き直してください。 @InjectMocks?わかりました。 (分かったとは⾔っていない) 過去の作成されたTestを⾒漁ってみたらあった @injectMocks使⽤例画像春 名前はsampleに変更してます。
27.
とりあえず、 ⾒つけたTestを⾒ながら作ってみる…
28.
テストもできて、無事プルリク通った テストを⾏いたい対象のクラス テスト対象のクラスに 依存しているクラス
29.
SpringRunner奮闘記 ‒Controller編
30.
SpringRunnner?知らんけどいけるっしょ この修正のテストお願いします。 SpringRunner使ってDIされてるのmockして みて 承知です! …。 依存している⼦をmockにしたいのですが、な んかうまくいきません…。 SpringRunnner? SpringRunnner使ってやればいけるよ (^ω^)
31.
これ SpringRunnnerってそもそもなに? 過去に書かれまくっていたtestから⾒つけ出しました
32.
SpringRunnerは? Bean同⼠の連携テストを⾏いたい… テスト上でDIの機能を活⽤したい… そんな時にSpringRunnerは使うみたいです。 1. JUnit上でSpringのDIコンテナを動かす機能 2. アプリケーションサーバ上にデプロイせずに、Spring
MVCの動作を再現する機能 テスト上で@Autowiredが使えるようになるよ。
33.
とりあえず、先輩⽅の作成した過去のテストを⾒てみよう 🙃 ?????
34.
SpringRunnerでは@MockBeanで Mockitoでは@Mock?
35.
@Mockと@MockBeanの違い @Mock @MockBean SpringRunnerから提供されているアノテーションで、mockオブジェクト が⽣成されると同時にアプリケーションコンテキストに追加される。 mockitoから提供されているアノテーションでmockオブジェクトの⽣成 をしてくれる。 噂のDIコンテナかぁって思って下さい
36.
あ、そうだ、このtestではリクエストを⾏なっ た際に返ってくるステータスの検証を ⾏なって下さい ?わかりました(分かったとは⾔ってない) 今までみたいにただメソッドを呼び出して返り値をチェックする 感じではなさげな匂いを察知
37.
このクラスに対してリクエストを⾶ばしてステータスをみる的な
38.
いい感じに何かしてくれる おまじない達 DIしてるspringのやつが貼ってあるていで
39.
返ってくるステータスが 200番かどうか 確認してます。
40.
怒られました。
41.
何で怒られているか Beanが⾜りずに依存関係が組めていないのでエラーが起こっていました。
42.
SpringでunitTestを実装してみよー! DIされているビーンのモックを ここで作る いい感じ
43.
プルリクを送るとーーー な、なんだってー!? 最初から⾔ってくれい!! 承知です…。 あと、⼊⼒エラーだった場合に表⽰される messageの検証もお願いします。
44.
Bodyの中⾝を⾒るので,,, Content()を⽐較でいいのか,,,?
45.
エラーメッセージはjson形式でresponse bodyの中に 格納されて渡されることになってます。 { ”errorMessage“:
”⼊⼒エラーです。" } どうassertしようか 🧐
46.
ライブラリーからjsonの部分抜粋してきました
47.
Jsonpathを使⽤してアサートし無事解決 最終的にできたtestがこちら
48.
springRunner奮闘記 ‒repository編
49.
SpringRunnner?そんなんなれましたわww Repository.classのテストしてね 承知です!! データベースとのIntegration Test🤔 データベースへのIntegration Testになると思 うので使うアノテーション気をつけて 習うより慣れろ感覚でとりあえずやってみよー!
50.
ちょっと待って、データのtestってことはsql流さなきゃいけないんじゃないか。。。? とりあえず過去に作成されたテストを⾒返して、 このアノテーションを使わなきゃいけないのが分かった。
51.
んえええ,テスト環境で どうやってデータ作ればいいんだよ
52.
実際にデータを登録できる⽅法があることを発⾒ 初期データはここにInsertを書けばできる!! INSERT INT book(code,
name) VALUES (ʼ001ʼ, ʻ源⽒物語ʼ);
53.
本を探すrepository Entity
54.
H2にある初期データを取得し、 アサートを⾏う
55.
まとめ
56.
• SpringRunnerを使⽤することによりテストの幅が広がる • SpringでのUnitTestは描きやすい •
⼀年初⼼者でもそれっぽくテストが書けるようになる
57.
終わり
Baixar agora