はじめに
下記記事において、factoryが動かないので PHPUnit\Framework\TestCase
を Tests\TestCase
にすればひとまず動くよって書きました。
そこで湧いた疑問
- そもそもこの2つの違いは?
-
Tests\TestCase
はLaravelフレームワーク外のPHPUnit\Framework\TestCase
を継承し、フレームワークのテストとしている(※表現要確認)
-
-
PHPUnit\Framework\TestCase
でfactory呼べるようにならないのか- 上記理由(フレームワーク外)と後述より、自然には呼べないし、呼ぶべきでない
- そもそもどういう経緯で
Tests\TestCase
からPHPUnit\Framework\TestCase
を利用するようになったのか- 本題
調べてみた
https://github.com/laravel/framework/commit/e30a0c979d98f2f1f7b6c565e4002734237a280b#diff-2af5293bd425fda750632a8ba4fab87a
https://github.com/laravel/laravel/pull/5169
要約
-
PHPUnit\Framework\TestCase
は単体テストTests\TestCase
は結合テストで使ってね- 確かにFeatureテストをmakeすると
Tests\TestCase
がデフォルトで継承される
- 確かにFeatureテストをmakeすると
- factory使うようなのはその時点で結合テストです
つまり
自分が書いたテストは結合テストだった。
認識としては、「モデルの1メソッドを動かして保存されてるかどうかをテストするのは単体テストやろ!」って感じだった。
とはいえ、プロジェクト的なUnitテストの認識がもうそうなっているので、しばらくは Tests\TestCase
の書き換えで対応しそう。
感想
- 認識を誤っていてすみませんでした。
- そこ変えたときにドキュメントに差を書いてくれればよかったのに。
- 読んでいるつもりですが書いていたら重ねてお詫び申し上げます
あとがき
友人が「Qiitaは翻訳サイト」って書いていて、まさにそうなったなぁと。