ここではユニットテストを実装するにあたっての基本的な考え方を記載しています。
実装手法の参考にしてください。
例えば、ブログ記事を追加するというメソッドがあった場合、データに不備があると困るだろうと考えます。
そうするとテストしなければならない内容はシンプルに次の2つとなります。
基本的にメソッドの結果は次の3つとなる事が多いです。その内容を検証する事になります。
失敗のテストもできるか考えてみましょう。
メソッドが何かを追加するメソッドだとしても、追加する際の詳細な処理は、そのメソッドの中で呼び出している別のメソッドが持っている場合があります。
例えば、コントローラー経由でブログ記事を追加するテストの場合、コントローラーでは、データの詳細な問題は特に知らず、「テーブルやサービスから返された、エラー内容を表示する」というのが責務になります。
そうすると、コントローラーのテストでは、バリデーションの詳細な内容のテストは不要で、ステータス、メッセージ、リダイレクトの有無などがテストすべき内容となります。
また、できるだけ、テストの中で何のテストをやっているのかというコメントを記載してください。
そうするとレビュアーにもテストの意図が伝わり、レビューが捗ります。
できるだけ無駄なコード、テストを省き、メソッドの仕様に必要なテストだけを書くようにしてください。
FixtureFactoryでデータを生成する際、テストに必要なフィールドはできるだけ指定しないようにしてください。
※ FixtureFactoryでは、フィールドに値を指定しない場合、自動でランダムな値が入る仕様です。
また、FixtureFactory側に再利用しやすいメソッドを追加してできるだけ再利用してください。
// FixtureFactory メソッド例
public function byPosted($posted)
{
return self::make([
'status' => true,
'posted' => $posted,
]);
}