Laravel でテストしやすいコードを書く5つのコツ2020/11/14(土) Techpitnunulk
View Slide
御礼 100部突破質問や要望など大歓迎ですのでどしどしお寄せください!
Agenda• 自動化されたソフトウェアテストの重要性• テストファースト vs. テストセカンド• Laravel でテストしやすいコードを書くコツ5 MIN5 MIN40 MIN
自動化されたソフトウェアテストの重要性
自動化されたソフトウェアテストの重要性共用しているモジュールの変更に対する変更漏れを防ぐことができます。変更検知手動テストではテストケースの漏れや確認ミスが発生しうるが、自動テストであれば毎回すべてのテストケースが実行されます。人為的ミスの回避パターンの多いケースを手動で何度もやるよりはコンピュータにやらせたほうが速くて安上がりです。コスト削減
テストファースト vs. テストセカンド
テストセカンドテストファースト
テストセカンドテストファースト ・仕様の理解が高い場合に向いている・実装方法が明瞭な場合に向いている・テストが書かれないことがある・仕様の理解が低い場合に向いている・実装方法が不明瞭な場合に向いている・テストが確実に書かれる
Laravel でテストしやすいコードを書くコツ
テストしやすいコードとは?ファイルの読み書きや外部サービスとのやりとりを分離しておくとテストが書きやすくなります。副作用が少ないテスト対象のクラスや関数が依存しているクラスや関数が少なくすることでテストが書きやすくなります。依存関係が少ないテストしたい対象をできるだけ小さくすることで、テストが書きやすくなります。関数が小さい
Laravel でテストしやすいコードを書くコツ 1/2ファイルの読み書きや外部サービスとのやりとりを分離しておくとテストが書きやすくなります。副作用を分離するDependency Injection は、引数に指定されたクラスのインスタンスを勝手に生成して渡してくれる仕組みで、テストのときにクラスの差し替えが簡単になります。DI を使うテストしたい対象をできるだけ小さくすることで、テストが書きやすくなります。関数をできるだけ小さくする
Laravel でテストしやすいコードを書くコツ 2/2静的メソッドをモックするのは若干面倒なので、インスタンス化しても変わらない場合はインスタンスメソッドにしましょう。できるだけ静的メソッドを使わないEloquent を使ったモデルの場合プロパティが public になりますが、プロパティアクセスはモックができないので、なるべくプロパティアクセスを減らしましょう。できるだけプロパティにアクセスしない