LaravelでPHPUnitを使用してテストする際の基本的な実施方法などをメモします。
LaravelにはPHPUnitが標準で入ってます。なのでインストールする必要はありません。
どんなシステムでもテストは必要になってきますが、まずはPHPUnitでテストする際の基本的な操作方法などを記載します。
testsディレクトリの構成
まずはtestsディレクトリの構成についてです。
最初は下記の構成になっているのですが、サンプルのテストファイルが用意されています。
tests ├─ Feature │ └─ ExampleTest.php │ ├─ Unit │ └─ ExampleTest.php │ ├─ CreatesApplication.php └─ TestCase.php
基本的には上記のファイル構成ですが、実際のディレクトリ構成と同じようにディレクトリを作成することも可能です。
例としては下記のような感じになります。
tests ├─ Http │ └─ Controller │ └─ ExampleTest.php │ ├─ Models │ └─ ExampleTest.php │ ├─ CreatesApplication.php └─ TestCase.php
その際は「phpunit.xml」の内容を変更します。
<testsuites>
<testsuite name="Unit">
<directory suffix="Test.php">./tests/Unit</directory>
</testsuite>
<testsuite name="Feature">
<directory suffix="Test.php">./tests/Feature</directory>
</testsuite>
<testsuite name="App">
<directory suffix="Test.php">./tests</directory>
</testsuite>
</testsuites>
上記の例では↓の部分を追加しています。
<testsuite name="App">
<directory suffix="Test.php">./tests</directory>
</testsuite>
これを記述することで「./tests」ディレクトリがテストの対象となります。
テストファイルの作成
テストファイルを作成する場合は下記のコマンドを実行します。
すると「Feature」ディレクトリ内にテストファイルが作成されます。
php artisan make:test HogeTest
また、unitのテストを作成する場合は「–unit」をつけて下記を実行。
php artisan make:test HogeTest --unit
上記実行するとベースとなるファイルが作成されます。
テスト実行
コマンドから下記を実行することでテストを流すことができます。
注意するのがテスト全体だと複数人で開発をしていた場合は他の方が書いたテストコードまで実行してしまう恐れがあります。
また、ファイル名の指定だと指定した文字列がテストしたいファイル以外のファイル名にも存在する場合、そちらも実行してしまいます。
・テスト全体
./vendor/bin/phpunit
・ファイルパス指定
./vendor/bin/phpunit tests/Feature/ExampleTest.php
・ファイル名の指定
./vendor/bin/phpunit --filter=ExampleTest
テストの書き方
上記で作成したテストファイルにtestから始まるメソッドを用意して、テストを記述します。
/**
* A basic test example.
*
* @return void
*/
public function testBasicTest()
{
$response = $this->get('/');
$response->assertStatus(200);
}
または、コメントで「@test」をつけることでメソッド名にtestをつけなくてもテストとして実行することが可能です。
/**
* @test
*/
public function BasicTest()
{
$response = $this->get('/');
$response->assertStatus(200);
}
今回はLaravelでPHPUnitを使用してテストする上で、基本的な実施方法などについて記載しました。
テストはプログラムを作成するときは必ず必要になりますので、しっかりテストを書けるように理解しながら進めることが大事だと思います。
また、DBなどが絡んでくる場合などは他にも設定した方がいいものなどありますが、また別の記事で記載したいと思います。