1K Views
March 12, 25
スライド概要
https://phpkansai.connpass.com/event/347053/
php勉強会の初LTです。
テスターがLaravelのtestをみてみた 第44回関西PHP勉強会(Laravel特集) 2025.3.14(金) やまずん Dirty Tester バキバキQA
自己紹介 ⚫ プロのQAであり、テスター ⚫ 駆け出しphper ⚫ 職業:4月から外資系QA ⚫ 住居:大阪 ⚫ 所属 ⚫ バキバキQAチャンネル チャンネル主 ⚫ testing.osaka 主催 ⚫ スクフェス祭り 実行委員 2
プロのテスターとして Laravelのテストについて 解釈してみたという話 3
Laravelをいれてみる 4
> composer global require laravel/installer 5
> laravel new example-app 6
> cd example-app 7
❯ ls -1 README.md app artisan bootstrap composer.json composer.lock config database node_modules package-lock.json package.json phpunit.xml public resources routes storage tests vendor vite.config.js 8
❯ ls -1 tests Feature TestCase.php Unit 9
❯ ls -1 tests Feature TestCase.php Unit 10
❯ ls -1 tests Feature TestCase.php Unit 「なんやこれ」 っておもった ことを はなす 11
Laravelのtestをみてみよう 12
Laravelのテストの構成 ⚫ Laravelはデフォルトでtestディレクトリが実装され ている ⚫ tests/Featureとtests/Unit ふたつあるんだ ね ⚫ 技術的な制約で区別しているわけではない ⚫ その気になればtests/UnitにFeatureテストを書ける 13
“Feature Test”ってなんなの? Feature tests test larger portions of your codebase, including the interaction of several objects with each other or even a complete HTTP request to your application.Generally, feature tests exercise a larger slice of your code and often include database interactions. いろいろ繋げる んだね フィーチャテストは、コードベースのより大きな部分、例えば複 数のオブジェクト間の相互作用や、アプリケーションへの完全な HTTPリクエストなどをテストします。一般的に、フィーチャテ ストはコードのより広い範囲を対象とし、データベースとのやり 取りを含むことが多いです。 14
“Unit Test”ってなんなの? Unit tests are focused on testing very small, isolated portions of your code. You want to determine if a single method is performing as expected very reliably and quickly. 独立したテスト をするんだね ユニットテストは、コードの非常に小さく、独立した部分をテス トすることに焦点を当てています。単一のメソッドが期待どおり に、非常に信頼性が高く、迅速に動作するかどうかを判断したい と考えます。 15
Feature TestとUnit Testの比較 スコープ 実行速度 依存 根拠 実際の テスト Feature Test 複数の部品を結合 (大きい) 比較的低速 高い 仕様など HTTPリクエスト APIなど Unit Test 単体の部品 (小さい) 高速 低い コードなど 関数の返り値など 二つにはこんな にちがいがある んだねえ 16
Feature Testを「機能テスト」って呼んでる説 Feature tests may test a larger portion of your code, including how several objects interact with each other or even a full HTTP request to a JSON endpoint. Generally, most of your tests should be feature tests. These types of tests provide the most confidence that your system as a whole is functioning as intended. 日本語翻訳ほん まにありがたい 機能テストでは、複数のオブジェクトが相互作用する方法や、JSONエ ンドポイントへの完全なHTTPリクエストなど、コードの広い部分をテ ストします。一般的に、ほとんどのテストは機能テストである必要が あります。これらのタイプのテストは、システム全体が意図したとお りに機能しているという信頼性を一番提供します。 https://github.com/laravel-ja/ja-docs-8.x/blob/master/translation-ja/testing.md 17
Feature Testを「機能テスト」って呼んでる説 ⚫ Laravelドキュメントの日本語化プロジェクトでは 「機能テスト」 ⚫ 他にも本とかQiitaとか見てると「機能テスト」とい いろんな本でも 機能テストって 言ってるんだ う訳語を当てているようにみえる ⚫ これがでPHP界隈で統一的された見解かどうかは不明 ⚫ ただ違和感を覚えた 18
Feature Testを「機能テスト」とすると少し違和感 ⚫ Feature Testを「機能テスト」と訳すと、Functional Testとかぶっ てしまう ⚫ テスト界隈では、単体テストの機能テスト、結合テストの機能テス ト、システムテストの機能テストがあるという考え方もある(後 機能テストのさ まざまな解釈 述) ⚫ LaravelにおけるFeature TestはLaravelアプリケーションの複数の コンポーネントを連結した状態での機能性を検証するテストと整理 するのがより本質的だと思った ⚫ Feature Testの訳語は多分ない ⚫ だからフィーチャーテストというしかない 19
テストレベルとテストタイプ いろんな概念が あるんだねえ 「テストレベル」というという考え方 ⚫ 単体テスト、結合テスト、システムテストとか ⚫ 「ユニットテスト」の訳語は単体テストにあたる ⚫ テストレベルを識別する統一的な見解は実は存在しない 機能テストは テストレベルではない ⚫ 典型的には「システムの結合度」で判断することが多い 「テストタイプ」という考え方 ⚫ 機能テスト、非機能テスト(性能テスト、負荷テストetc) ⚫ 統一的な(略) 機能テストは テストタイプである ⚫ 典型的にはテストが担保する品質特性で判断することが多い 20
テストレベルの識別 21
テストレベルを識別することの意味 ⚫ テストのスコープを定義することで、効率的なテストが 行える ⚫ より早い段階で、より早いテストを実現する ⚫ 一般的に、結合度の低いテストは早く終わる 識別っ て”Identify”の訳 語だね ⚫ 例:Webのシステムテストは一件のテストに10秒かかるが、ユニッ トテストは1秒かからないなど ⚫ 一般的に、それぞれの結合度や環境で見つかりやすい不具合 は違う ⚫ 例:メソッド単位のテストでは本番環境で見つかる不具合は見つか らないなど 22
他者と会話する時の注意 ⚫ 「機能テストをしました」ではあんまり通じないかもしれな い ⚫ システムレベルの機能テストと結合レベルの機能テストはできる ことが異なる テストは納得感 が大事だという 説がある ⚫ 「hogehoge環境でfugafuga観点のテストをしました」とか ⚫ これだけでは足りないので、この辺はお近くのテスターに聞いて みてください ⚫ 「Feature Testしました」は「Laravelのテストをしました」 以上の意味を持たない可能性がある 23
「自分たちは何のテストをしているのか」 がチームで納得いく形で理解することで よりよいテストができる (かもしれない) 24
参考文献 いつもありがと ね〜 • https://laravel.com • Laravel8.x公式ドキュメント翻訳リポジトリ,https://github.com/laravelja/ja-docs-8.x/blob/master/translation-ja/testing.md • ブロッコリーのブログ、テストレベルに「機能テスト」が入ると困る理由、 2025/2/26、https://nihonbuson.hatenadiary.jp/entry/2019/12/03/003000 • https://zenn.dev/55_ymzn/books/what_is_testing イラスト:タスマニア・デビ男 25