テストし易いコードを書く為にやっていること
関数、メソッドの引数、返り値の型を制限する
例
public function formatPrice(int $price):string { return number_format($price) . "円"; }
このように引数に型を宣言することで、宣言した型の引数のみテストすれば良くなり、テストパターンを減らす事ができる。ただしPHP7からの機能です。
※関数、メソッドの引数、返り値の型を制限のテストは別で行っておく必要はあると思います。
1つのメソッドには1つの機能だけ持つようにする。
メソッド名が長くなりすぎたり、○○○And○○○見たくなってたりした場合は1つのメソッドに機能をもたせすぎている場合がある。2以上の機能があるとテストしにくい。
DBテスト用のDBを用意する
これについては別で記事を書いたので以下のURLを見ていただければと思います。
laravelでDBテストコードを書く前の設定すべきこと
DBに対しての処理はRepositoryクラスにまとめる
DBに対しての処理をRepositoryクラスにまとめることで、何度もDBに対しての処理のテストを書く必要がなくなる。またテストコードも見やすくなる。
テストコードを書きすぎない
テストコードを増やし過ぎると、1回1回のテストの処理が重くなって開発速度が下がってしまう。
また、テストを追加するのは簡単だが、テストを減らすのはそのテストを書いた人出ないと出来ないケースが多いので、テストを書く段階で本当にそのテストが必要か考えてから書くべきです。
テストのメソッド名を日本語で書く
日本語の分かるチームで開発を行っている場合は、テストのメソッドの名前を日本語でにすることで、何のテストなのかが分かりやすくなり、テストコードがそのまま仕様書の機能を果たしたりもするようににある。
まとめ
どこまでテストするかの判断
カバレッジを100%にするには、1つのメソッドに対して複数のテストをしなくては行けない場合がよくある。
しかし大概の場合、全てをテストしている時間は無いのでテストすべき箇所と、そうでない箇所とで切り分けをしなければならない。これはプロジェクトの状況に応じて、どこまでテストするかを決めなければならない。
たとえばキャンペーンなど期間限定のものであれば、手動でテストして動けば、テストコードを書く必要がはない場合もある。
逆に銀行系のシステムなどでは、ミスが許されないので、十分にテストする必要がある。