Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Laravelでテストしやすいコードを書く5 / 5 tips of building testable modules in Laravel

nunulk
November 14, 2020

Laravelでテストしやすいコードを書く5 / 5 tips of building testable modules in Laravel

nunulk

November 14, 2020
Tweet

More Decks by nunulk

Other Decks in Programming

Transcript

  1. Laravel でテストしやすいコードを書く5つのコツ
    2020/11/14(土) Techpit
    nunulk

    View full-size slide

  2. 御礼 100部突破

    質問や要望など大歓迎ですので
    どしどしお寄せください!

    View full-size slide

  3. Agenda
    • 自動化されたソフトウェアテストの重要性
    • テストファースト vs. テストセカンド
    • Laravel でテストしやすいコードを書くコツ
    5 MIN
    5 MIN
    40 MIN

    View full-size slide

  4. 自動化されたソフトウェアテストの重要性

    View full-size slide

  5. 自動化されたソフトウェアテストの重要性
    共用しているモジュールの変更に
    対する変更漏れを防ぐことができ
    ます。
    変更検知
    手動テストではテストケースの漏
    れや確認ミスが発生しうるが、自
    動テストであれば毎回すべてのテ
    ストケースが実行されます。
    人為的ミスの回避
    パターンの多いケースを手動で何
    度もやるよりはコンピュータにや
    らせたほうが速くて安上がりで
    す。
    コスト削減

    View full-size slide

  6. テストファースト vs. テストセカンド

    View full-size slide

  7. テストセカンド
    テストファースト

    View full-size slide

  8. テストセカンド
    テストファースト

    View full-size slide

  9. テストセカンド
    テストファースト ・仕様の理解が高い場合に向いている
    ・実装方法が明瞭な場合に向いている
    ・テストが書かれないことがある
    ・仕様の理解が低い場合に向いている
    ・実装方法が不明瞭な場合に向いている
    ・テストが確実に書かれる

    View full-size slide

  10. Laravel でテストしやすいコードを書くコツ

    View full-size slide

  11. テストしやすいコードとは?
    ファイルの読み書きや外部サービ
    スとのやりとりを分離しておくと
    テストが書きやすくなります。
    副作用が少ない
    テスト対象のクラスや関数が依存
    しているクラスや関数が少なくす
    ることでテストが書きやすくなり
    ます。
    依存関係が少ない
    テストしたい対象をできるだけ小
    さくすることで、テストが書きや
    すくなります。
    関数が小さい

    View full-size slide

  12. Laravel でテストしやすいコードを書くコツ 1/2
    ファイルの読み書きや外部サービ
    スとのやりとりを分離しておくと
    テストが書きやすくなります。
    副作用を分離する
    Dependency Injection は、引数に指
    定されたクラスのインスタンスを
    勝手に生成して渡してくれる仕組
    みで、テストのときにクラスの差
    し替えが簡単になります。
    DI を使う
    テストしたい対象をできるだけ小
    さくすることで、テストが書きや
    すくなります。
    関数をできるだけ小さくす

    View full-size slide

  13. Laravel でテストしやすいコードを書くコツ 2/2
    静的メソッドをモックするのは若
    干面倒なので、インスタンス化し
    ても変わらない場合はインスタン
    スメソッドにしましょう。
    できるだけ静的メソッ
    ドを使わない
    Eloquent を使ったモデルの場合プ
    ロパティが public になりますが、
    プロパティアクセスはモックがで
    きないので、なるべくプロパティ
    アクセスを減らしましょう。
    できるだけプロパティ
    にアクセスしない

    View full-size slide