Suche senden
Hochladen
Spring 歴約1年初心者の Test 奮闘記
•
2 gefällt mir
•
3,218 views
C
chishizu naito
Folgen
2019/4/25 JSUG勉強会 2019その4 初心者による初心者のSpring入門
Weniger lesen
Mehr lesen
Ingenieurwesen
Melden
Teilen
Melden
Teilen
1 von 57
Jetzt herunterladen
Downloaden Sie, um offline zu lesen
Empfohlen
劇的改善 Ci4時間から5分へ〜私がやった10のこと〜
劇的改善 Ci4時間から5分へ〜私がやった10のこと〜
aha_oretama
Spring Boot × Vue.jsでSPAを作る
Spring Boot × Vue.jsでSPAを作る
Go Miyasaka
さくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組み
Takeshi Ogawa
Springを何となく使ってる人が抑えるべきポイント
Springを何となく使ってる人が抑えるべきポイント
土岐 孝平
Spring bootでweb ユニットテスト編
Spring bootでweb ユニットテスト編
なべ
Spring starterによるSpring Boot Starter
Spring starterによるSpring Boot Starter
Ryosuke Uchitate
入社1年目のプログラミング初心者がSpringを学ぶための手引き
入社1年目のプログラミング初心者がSpringを学ぶための手引き
土岐 孝平
決済システムの内製化への旅 - SpringとPCFで作るクラウドネイティブなシステム開発 #jsug #sf_h1
決済システムの内製化への旅 - SpringとPCFで作るクラウドネイティブなシステム開発 #jsug #sf_h1
Toshiaki Maki
Empfohlen
劇的改善 Ci4時間から5分へ〜私がやった10のこと〜
劇的改善 Ci4時間から5分へ〜私がやった10のこと〜
aha_oretama
Spring Boot × Vue.jsでSPAを作る
Spring Boot × Vue.jsでSPAを作る
Go Miyasaka
さくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組み
Takeshi Ogawa
Springを何となく使ってる人が抑えるべきポイント
Springを何となく使ってる人が抑えるべきポイント
土岐 孝平
Spring bootでweb ユニットテスト編
Spring bootでweb ユニットテスト編
なべ
Spring starterによるSpring Boot Starter
Spring starterによるSpring Boot Starter
Ryosuke Uchitate
入社1年目のプログラミング初心者がSpringを学ぶための手引き
入社1年目のプログラミング初心者がSpringを学ぶための手引き
土岐 孝平
決済システムの内製化への旅 - SpringとPCFで作るクラウドネイティブなシステム開発 #jsug #sf_h1
決済システムの内製化への旅 - SpringとPCFで作るクラウドネイティブなシステム開発 #jsug #sf_h1
Toshiaki Maki
Spring 5でSpring Testのここが変わる_公開版
Spring 5でSpring Testのここが変わる_公開版
Yuichi Hasegawa
初めてでも30分で分かるSpring 5 & Spring Boot 2オーバービュー
初めてでも30分で分かるSpring 5 & Spring Boot 2オーバービュー
Masatoshi Tada
失敗事例で学ぶ負荷試験
失敗事例で学ぶ負荷試験
樽八 仲川
これからSpringを使う開発者が知っておくべきこと
これからSpringを使う開発者が知っておくべきこと
土岐 孝平
テスト分析入門 -「ゆもつよメソッド」を例に- #wacate
テスト分析入門 -「ゆもつよメソッド」を例に- #wacate
Kinji Akemine
ペアプロするならgit-duetを使おう
ペアプロするならgit-duetを使おう
Shinya Nakajima
Junitを使ったjavaのテスト入門
Junitを使ったjavaのテスト入門
Satoshi Kubo
今さら聞けないDiとspring
今さら聞けないDiとspring
土岐 孝平
Spring と TDD
Spring と TDD
Takeshi Ogawa
SpringBootTest入門
SpringBootTest入門
Yahoo!デベロッパーネットワーク
設計をする上で役にたった制約について
設計をする上で役にたった制約について
Ikki Takahashi
今から始めるWebClient(JSUG勉強会 2020年その6 LT大会)
今から始めるWebClient(JSUG勉強会 2020年その6 LT大会)
NTT DATA Technology & Innovation
C#の強み、或いは何故PHPから乗り換えるのか
C#の強み、或いは何故PHPから乗り換えるのか
Yoshifumi Kawai
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
apkiban
スキトラ Spring + mybatis
スキトラ Spring + mybatis
小川 昌吾
Selenium WebDriver + python で E2Eテスト自動化
Selenium WebDriver + python で E2Eテスト自動化
JustSystems Corporation
What's new in Spring Batch 5
What's new in Spring Batch 5
ikeyat
これから始めるSpringのwebアプリケーション
これから始めるSpringのwebアプリケーション
土岐 孝平
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
NTT DATA Technology & Innovation
メンバーのスキルアップ、どうしてる? − Java 100本ノックで新加入メンバーを鍛えてみた −
メンバーのスキルアップ、どうしてる? − Java 100本ノックで新加入メンバーを鍛えてみた −
JustSystems Corporation
Weitere ähnliche Inhalte
Was ist angesagt?
Spring 5でSpring Testのここが変わる_公開版
Spring 5でSpring Testのここが変わる_公開版
Yuichi Hasegawa
初めてでも30分で分かるSpring 5 & Spring Boot 2オーバービュー
初めてでも30分で分かるSpring 5 & Spring Boot 2オーバービュー
Masatoshi Tada
失敗事例で学ぶ負荷試験
失敗事例で学ぶ負荷試験
樽八 仲川
これからSpringを使う開発者が知っておくべきこと
これからSpringを使う開発者が知っておくべきこと
土岐 孝平
テスト分析入門 -「ゆもつよメソッド」を例に- #wacate
テスト分析入門 -「ゆもつよメソッド」を例に- #wacate
Kinji Akemine
ペアプロするならgit-duetを使おう
ペアプロするならgit-duetを使おう
Shinya Nakajima
Junitを使ったjavaのテスト入門
Junitを使ったjavaのテスト入門
Satoshi Kubo
今さら聞けないDiとspring
今さら聞けないDiとspring
土岐 孝平
Spring と TDD
Spring と TDD
Takeshi Ogawa
SpringBootTest入門
SpringBootTest入門
Yahoo!デベロッパーネットワーク
設計をする上で役にたった制約について
設計をする上で役にたった制約について
Ikki Takahashi
今から始めるWebClient(JSUG勉強会 2020年その6 LT大会)
今から始めるWebClient(JSUG勉強会 2020年その6 LT大会)
NTT DATA Technology & Innovation
C#の強み、或いは何故PHPから乗り換えるのか
C#の強み、或いは何故PHPから乗り換えるのか
Yoshifumi Kawai
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
apkiban
スキトラ Spring + mybatis
スキトラ Spring + mybatis
小川 昌吾
Selenium WebDriver + python で E2Eテスト自動化
Selenium WebDriver + python で E2Eテスト自動化
JustSystems Corporation
What's new in Spring Batch 5
What's new in Spring Batch 5
ikeyat
これから始めるSpringのwebアプリケーション
これから始めるSpringのwebアプリケーション
土岐 孝平
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
NTT DATA Technology & Innovation
メンバーのスキルアップ、どうしてる? − Java 100本ノックで新加入メンバーを鍛えてみた −
メンバーのスキルアップ、どうしてる? − Java 100本ノックで新加入メンバーを鍛えてみた −
JustSystems Corporation
Was ist angesagt?
(20)
Spring 5でSpring Testのここが変わる_公開版
Spring 5でSpring Testのここが変わる_公開版
初めてでも30分で分かるSpring 5 & Spring Boot 2オーバービュー
初めてでも30分で分かるSpring 5 & Spring Boot 2オーバービュー
失敗事例で学ぶ負荷試験
失敗事例で学ぶ負荷試験
これからSpringを使う開発者が知っておくべきこと
これからSpringを使う開発者が知っておくべきこと
テスト分析入門 -「ゆもつよメソッド」を例に- #wacate
テスト分析入門 -「ゆもつよメソッド」を例に- #wacate
ペアプロするならgit-duetを使おう
ペアプロするならgit-duetを使おう
Junitを使ったjavaのテスト入門
Junitを使ったjavaのテスト入門
今さら聞けないDiとspring
今さら聞けないDiとspring
Spring と TDD
Spring と TDD
SpringBootTest入門
SpringBootTest入門
設計をする上で役にたった制約について
設計をする上で役にたった制約について
今から始めるWebClient(JSUG勉強会 2020年その6 LT大会)
今から始めるWebClient(JSUG勉強会 2020年その6 LT大会)
C#の強み、或いは何故PHPから乗り換えるのか
C#の強み、或いは何故PHPから乗り換えるのか
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
スキトラ Spring + mybatis
スキトラ Spring + mybatis
Selenium WebDriver + python で E2Eテスト自動化
Selenium WebDriver + python で E2Eテスト自動化
What's new in Spring Batch 5
What's new in Spring Batch 5
これから始めるSpringのwebアプリケーション
これから始めるSpringのwebアプリケーション
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
メンバーのスキルアップ、どうしてる? − Java 100本ノックで新加入メンバーを鍛えてみた −
メンバーのスキルアップ、どうしてる? − Java 100本ノックで新加入メンバーを鍛えてみた −
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.
終わり
Jetzt herunterladen