Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

Spring 歴約1年初心者の Test 奮闘記

2.016 Aufrufe

Veröffentlicht am

2019/4/25
JSUG勉強会 2019その4 初心者による初心者のSpring入門

Veröffentlicht in: Ingenieurwesen
  • Hi there! I just wanted to share a list of sites that helped me a lot during my studies: .................................................................................................................................... www.EssayWrite.best - Write an essay .................................................................................................................................... www.LitReview.xyz - Summary of books .................................................................................................................................... www.Coursework.best - Online coursework .................................................................................................................................... www.Dissertations.me - proquest dissertations .................................................................................................................................... www.ReMovie.club - Movies reviews .................................................................................................................................... www.WebSlides.vip - Best powerpoint presentations .................................................................................................................................... www.WritePaper.info - Write a research paper .................................................................................................................................... www.EddyHelp.com - Homework help online .................................................................................................................................... www.MyResumeHelp.net - Professional resume writing service .................................................................................................................................. www.HelpWriting.net - Help with writing any papers ......................................................................................................................................... Save so as not to lose
       Antworten 
    Sind Sie sicher, dass Sie …  Ja  Nein
    Ihre Nachricht erscheint hier

Spring 歴約1年初心者の Test 奮闘記

  1. 1. Spring 歴約1年初⼼者の Test 奮闘記 タグバンガーズ 内藤
  2. 2. • 内藤 千静 所属:株式会社タグバンガーズ • Spring 歴 1年弱くらい • Java 歴4,5年くらい ⾃⼰紹介
  3. 3. 奮闘⼀覧 1.JUnit奮闘記 2.Mockito奮闘記 3.SpringRunner奮闘記 1.springRunnerでControllerのテスト 2.springRunnerでrepositoryのテスト 4.まとめ
  4. 4. JUnit奮闘記
  5. 5. 研修も終わり、実務を始めてから数⽇ そろそろ、Unit Testも実装していきたいよね。 testのプログラムを書くんだよ。 まあとりあえず、やりながら説明するよ。 Unit Test?(って単体テストだよな…?実装っ て?) え?(書くって何だ。) よくわかんないけどわかりました。 Unit Testを書くにあたってJUnitを使ってくね。 はい?(またよくわからん英語出てきた。)
  6. 6. くそだる…
  7. 7. そして私がどれくらいTestの知識がなかったかというと… こいつ
  8. 8. Unit Testと仲良くなる為には彼を知るところから 始めなければいけない(ついでにJUnitも)🧐
  9. 9. Unit Testについて調べてみたらこんなことがわかりました • 作成したコードが要件を満たしているか確認するもの • プロダクションコードに書かれた処理がユニットテストに提⽰され るため、プロダクションコードの理解を助けてくれる • ⼀度書いてしまえば、⼿軽に何度でもテストを⾏うことができます。
  10. 10. そしてJUnitではこんなことができるらしい…!!
  11. 11. ⼀度書いてしまえば、 何度でも使いまわせる、、、だと!? しかも⾃動化される、、、!??
  12. 12. このクラスのtestコードを書け!! • getWordメソッドが呼ばれた際に想 定している値が返ってくるか
  13. 13. • getWord()の引数1を指定した場合 に”いえーい”が返ってくる • getWord()の引数2を指定した場合 に”元気ー??”が返ってくる • 上記以外の引数を渡した場合 に”1or2を⼊⼒して下さい”が返っ てくるか
  14. 14. 実際に⾊々調べながら書いた結果がこちら assertThat()を使⽤して想定した値が 返ってくるか確認
  15. 15. あれ?割と余裕じゃね…? 👏👏👏
  16. 16. Mockitoテストでの奮闘記
  17. 17. UnitTestを知り、余裕をこいていたある⽇ この修正のテスト書ける? ほいじゃよろしく👍 それ依存されてるクラスを mockしなきゃテスト難しいかも 書けます(余裕だわ) 承知です!! ……??なんかエラーがでまくってて上⼿くテ ストが動かないです。。 mock? mockito使ってやればいけるよ(^ω^)
  18. 18. mockitoって?
  19. 19. MockitoJUnitRunner ※mockを簡単に使えるように⼿助けしてくれるライブラリの⼀つです。 JUnit単体ではmock Testを⾏うことが不可能なため、 mockライブラリーを使⽤する必要があります。 使⽤する際はいい感じに何かしてくれる おまじないの@RunWithに MockitoJunitRunnner.classを指定すると使える ※テストを⾏う際に依存しているクラスを装ってそれっぽく動いてくれる便利な機能
  20. 20. mockを使わなきゃいけない場⾯って?
  21. 21. 1. 検証したいクラスは完成済みでテストしたいんだけど、クラスの中で 利⽤している別クラスが未完成の場合 2. 異常系の動作確認を⾏う場合 3. ⻑々と依存しているクラスのnewをおこなうのが⾯倒な場合 4. 外部との連携を⾏うクラスの依存がある場合
  22. 22. この機能を使って実装してみよー
  23. 23. 今回は未完成のクラスがあった場合のtest
  24. 24. Constructorを少し変更
  25. 25. テスト
  26. 26. プルリクダメ出し @InjectMocksを使⽤して書き直してください。 @InjectMocks?わかりました。 (分かったとは⾔っていない) 過去の作成されたTestを⾒漁ってみたらあった @injectMocks使⽤例画像春 名前はsampleに変更してます。
  27. 27. とりあえず、 ⾒つけたTestを⾒ながら作ってみる…
  28. 28. テストもできて、無事プルリク通った テストを⾏いたい対象のクラス テスト対象のクラスに 依存しているクラス
  29. 29. SpringRunner奮闘記 ‒Controller編
  30. 30. SpringRunnner?知らんけどいけるっしょ この修正のテストお願いします。 SpringRunner使ってDIされてるのmockして みて 承知です! …。 依存している⼦をmockにしたいのですが、な んかうまくいきません…。 SpringRunnner? SpringRunnner使ってやればいけるよ (^ω^)
  31. 31. これ SpringRunnnerってそもそもなに? 過去に書かれまくっていたtestから⾒つけ出しました
  32. 32. SpringRunnerは? Bean同⼠の連携テストを⾏いたい… テスト上でDIの機能を活⽤したい… そんな時にSpringRunnerは使うみたいです。 1. JUnit上でSpringのDIコンテナを動かす機能 2. アプリケーションサーバ上にデプロイせずに、Spring MVCの動作を再現する機能 テスト上で@Autowiredが使えるようになるよ。
  33. 33. とりあえず、先輩⽅の作成した過去のテストを⾒てみよう 🙃 ?????
  34. 34. SpringRunnerでは@MockBeanで Mockitoでは@Mock?
  35. 35. @Mockと@MockBeanの違い @Mock @MockBean SpringRunnerから提供されているアノテーションで、mockオブジェクト が⽣成されると同時にアプリケーションコンテキストに追加される。 mockitoから提供されているアノテーションでmockオブジェクトの⽣成 をしてくれる。 噂のDIコンテナかぁって思って下さい
  36. 36. あ、そうだ、このtestではリクエストを⾏なっ た際に返ってくるステータスの検証を ⾏なって下さい ?わかりました(分かったとは⾔ってない) 今までみたいにただメソッドを呼び出して返り値をチェックする 感じではなさげな匂いを察知
  37. 37. このクラスに対してリクエストを⾶ばしてステータスをみる的な
  38. 38. いい感じに何かしてくれる おまじない達 DIしてるspringのやつが貼ってあるていで
  39. 39. 返ってくるステータスが 200番かどうか 確認してます。
  40. 40. 怒られました。
  41. 41. 何で怒られているか Beanが⾜りずに依存関係が組めていないのでエラーが起こっていました。
  42. 42. SpringでunitTestを実装してみよー! DIされているビーンのモックを ここで作る いい感じ
  43. 43. プルリクを送るとーーー な、なんだってー!? 最初から⾔ってくれい!! 承知です…。 あと、⼊⼒エラーだった場合に表⽰される messageの検証もお願いします。
  44. 44. Bodyの中⾝を⾒るので,,, Content()を⽐較でいいのか,,,?
  45. 45. エラーメッセージはjson形式でresponse bodyの中に 格納されて渡されることになってます。 { ”errorMessage“: ”⼊⼒エラーです。" } どうassertしようか 🧐
  46. 46. ライブラリーからjsonの部分抜粋してきました
  47. 47. Jsonpathを使⽤してアサートし無事解決 最終的にできたtestがこちら
  48. 48. springRunner奮闘記 ‒repository編
  49. 49. SpringRunnner?そんなんなれましたわww Repository.classのテストしてね 承知です!! データベースとのIntegration Test🤔 データベースへのIntegration Testになると思 うので使うアノテーション気をつけて 習うより慣れろ感覚でとりあえずやってみよー!
  50. 50. ちょっと待って、データのtestってことはsql流さなきゃいけないんじゃないか。。。? とりあえず過去に作成されたテストを⾒返して、 このアノテーションを使わなきゃいけないのが分かった。
  51. 51. んえええ,テスト環境で どうやってデータ作ればいいんだよ
  52. 52. 実際にデータを登録できる⽅法があることを発⾒ 初期データはここにInsertを書けばできる!! INSERT INT book(code, name) VALUES (ʼ001ʼ, ʻ源⽒物語ʼ);
  53. 53. 本を探すrepository Entity
  54. 54. H2にある初期データを取得し、 アサートを⾏う
  55. 55. まとめ
  56. 56. • SpringRunnerを使⽤することによりテストの幅が広がる • SpringでのUnitTestは描きやすい • ⼀年初⼼者でもそれっぽくテストが書けるようになる
  57. 57. 終わり

×