14
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

自分の考えていたUnitTestはUnitTestじゃなかった

Last updated at Posted at 2020-03-30

はじめに

下記記事において、factoryが動かないので PHPUnit\Framework\TestCaseTests\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 がデフォルトで継承される
  • factory使うようなのはその時点で結合テストです

つまり

自分が書いたテストは結合テストだった。

認識としては、「モデルの1メソッドを動かして保存されてるかどうかをテストするのは単体テストやろ!」って感じだった。

とはいえ、プロジェクト的なUnitテストの認識がもうそうなっているので、しばらくは Tests\TestCase の書き換えで対応しそう。

感想

  • 認識を誤っていてすみませんでした。
  • そこ変えたときにドキュメントに差を書いてくれればよかったのに。
    • 読んでいるつもりですが書いていたら重ねてお詫び申し上げます

あとがき

友人が「Qiitaは翻訳サイト」って書いていて、まさにそうなったなぁと。

14
3
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?