Contenu connexe
Similaire à テストを書くのに挫折したあとやったこと (20)
テストを書くのに挫折したあとやったこと
- 1. Copyright © 2016 Yuta Ohashi All Rights Reserved.
テスト書くのに
挫折したあと
やったこと
雑兵MeetUp #3
2016.02.19
Yuta Ohashi
- 3. 3Copyright © 2016 Yuta Ohashi All Rights Reserved.photo by Jonno Witts [ https://www.flickr.com/photos/jonnowitts/2429136239/ ]
- 4. 4Copyright © 2016 Yuta Ohashi All Rights Reserved.
そもそもスキルが足りないんzy(ry
そ・・・そんなこと・・・あ、あるよ・・・
- 6. 6Copyright © 2016 Yuta Ohashi All Rights Reserved.
レガシーコード改善ガイド
テストのないコードは
レガシーコードだ!
- 9. 9Copyright © 2016 Yuta Ohashi All Rights Reserved.
モデルの中でnewしてる
ジャマだ・・・
private function setMemoOption($memos){
if(!empty($memos)){
$memos = array();
foreach ($memos as $value) {
$memos[] = new Memo($value);
}
}
return $memos;
}
※コードはサンプルですよ
- 10. 10Copyright © 2016 Yuta Ohashi All Rights Reserved.
コントローラーの中でrequireしてる
なぜそこで・・・(500行目くらい)
try {
require_once 'Models/Memo.php';
$memo = $this->_getMemo($memo_id);
} catch (Exception $e) {
throw $e;
}
protected function _getMemo($memo_id){
$memo = Memo::getMemo($memo_id);
if($memo !== null){
return $memo;
}
return Memo::getMemoFromDB($memo_id);
}
※コードはサンプルですよ
- 11. 11Copyright © 2016 Yuta Ohashi All Rights Reserved.photo by Bev Sykes [ https://www.flickr.com/photos/basykes/490907537/ ]
いやだー!!!
- 12. 12Copyright © 2016 Yuta Ohashi All Rights Reserved.
もうテスト書くのやーめた(白目
テスト初心者の心は折れた・・・
• 検索すれば色々な手法があるが全然分からん。←勉強不足
• ファイルがてんこ盛りで大杉内
• 気軽にコミットできない
• そもそも1人でやるのつらくない!?
• みんなでやりたいなぁ・・・(と声を上げる勇気もない
• etc…etc….etc…..
- 13. 13Copyright © 2016 Yuta Ohashi All Rights Reserved.
でも何かやらなきゃ・・・という気持ちはある
あきらめたらそこで試合終了ですよ。
• 1人でやる方法はないか?
• 既存コードを汚さず(修正せず)できることはないか?
- 16. 16Copyright © 2016 Yuta Ohashi All Rights Reserved.
テスト書くのに挫折してテスト書いてた
Selenium WebDriverを試してみた!
• 1人で始められる
• ローカルに環境整えればOK
• 既存のコードと完全に分けて書いておける
• 自分のPCでブラウザ動いて見ていて楽しい
• テストやってるー!って気分になる
• etc…etc….etc…..
- 17. 17Copyright © 2016 Yuta Ohashi All Rights Reserved.
Selenium WebDriver with PHPUnit
Vagrant 自分のPC
Jenkins
PHPUnit Test
Selenium Grid Server(hub)
Selenium Grid Server(node)
Brower
0.登場人物
- 18. 18Copyright © 2016 Yuta Ohashi All Rights Reserved.
Selenium WebDriver with PHPUnit
1.JenkinsからPHPUnitを実行
Vagrant 自分のPC
- 19. 19Copyright © 2016 Yuta Ohashi All Rights Reserved.
Selenium WebDriver with PHPUnit
2.PHPUnitからSelenium Grid Server(hub)を呼ぶ
Vagrant 自分のPC
- 20. 20Copyright © 2016 Yuta Ohashi All Rights Reserved.
Selenium WebDriver with PHPUnit
3.Selenium Grid Server(hub)がNodeを呼ぶ
Vagrant 自分のPC
- 21. 21Copyright © 2016 Yuta Ohashi All Rights Reserved.
Selenium WebDriver with PHPUnit
4.指定されたブラウザでページを開いてテスト
Vagrant 自分のPC
- 22. 22Copyright © 2016 Yuta Ohashi All Rights Reserved.
どんなことをテストした?
主要なページでできること(機能)をテスト化
• タイトルタグの中身は正しい?
• ちゃんと投稿ができるか?
• いいねボタンは機能するか?
• Javascriptの動作は正常か?
• ログインしていない場合はログインページに遷移するか?
• Jenkinsで定期実行
• いわゆるリグレッションテスト?
Webページを自分で操作して確認できることは、
だいたいテストとして表現が可能
- 23. 23Copyright © 2016 Yuta Ohashi All Rights Reserved.
気付いたこと
こんなことが良かった
• ぼっちではじめられる!
• 既存のコードは汚さずこっそりできた!
• テスト書いたページに改修が入るとテストの調整がいる
• 読み込みエラーとか(広告が刺さったり)でたまにSeleniumこける
• Seleniumが動いている間はフォーカスが奪われて作業にならない
こんなことが悪かった
- 24. 24Copyright © 2016 Yuta Ohashi All Rights Reserved.
そして数ヶ月・・・
JenkinsでSeleniumを毎晩定期実行してたら・・・
デグレを発見できた!
- 25. 25Copyright © 2016 Yuta Ohashi All Rights Reserved.
何を見つけた?
クリック後にポップアップが出る部分
• いいねボタンを押すと対象者の名前がポップアップで出る
↓
• ex)「○○さんの投稿にいいねしました!」
↓
• なぜか「undefinedさんの投稿にいいねしました!」になってる
↓
• 対象者の名前が入ってるDOMの要素を間違って削除しちゃってた(気づきにくいよね
↓
• JavascriptでDOMが読めなくて変数ないのでundefined
↓
• 気がついて連絡
↓
• Seleniumまぁまぁやるじゃん!の声をいただく
- 26. 26Copyright © 2016 Yuta Ohashi All Rights Reserved.photo by Elisabeth Audrey [ https://www.flickr.com/photos/worldgreen/2761649246/ ]
テストがちょっと
楽しくなった瞬間でした
- 28. 28Copyright © 2016 Yuta Ohashi All Rights Reserved.
チームの中でもテストが
ちょっとでも意識された瞬間
photo by littlekiss☆l[ https://www.flickr.com/photos/littlekiss3/15172213184/ ]
- 29. 29Copyright © 2016 Yuta Ohashi All Rights Reserved.
まとめ?
テストが書けるスキルは必要とされる時代
• やっぱりテスト大事
• 「書かない」を選んでるならまだいい
• 「書けない」のはまずい
• Laravelリファレンス本でも50ページに渡ってテストの章が(分かりやすい
• でも困ったらSeleniumからはじめてみてもいいかも