PHPUnitでユニットテストを書くための準備をしてみた
なんだかんだ最近PHPを書く機会が出てきているのですが、先日PHPUnitでテストを書いてみました。
その際の導入から設定、実際に書く前まで。
はじめに
以下で実施しました。
- PHP 7.3.x
- PHPUnit 8.4
Composerが導入されているプロジェクト前提です。
├ src/
├ vendor/
├ tests/ // テストコード格納
├ composer.json
├ composer.lock
└ phpunit.xml // PHPUnit設定ファイル
PHPUnitを導入
とりあえず、PHPUnitをインストールします。
$ composer require phpunit/phpunit --dev
バージョン指定はしてないんですけど、実施時は v8.4 が入りました。
composerでパッケージをインストールする時にバージョンを指定する場合は、パッケージ名の後ろに :バージョン番号
を付けるといいみたいですね。
PHPUnitは開発用なので、 dev オプションをつけて、composer.jsonの reequire-dev
に追加します。
PHPUnitの設定
phpunit.xml を作成
こんな感じにした。
<?xml version="1.0" encoding="UTF-8" ?>
<phpunit
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
bootstrap="tests/bootstrap.php"
cacheResult="false"
cacheTokens="false"
colors="true"
stopOnError="false"
stopOnFailure="false"
stopOnIncomplete="false"
stopOnSkipped="false"
stopOnRisky="false"
verbose="false"
>
<testsuites>
<testsuite name="Test suite">
<directory>tests</directory>
</testsuite>
</testsuites>
</phpunit>
vendor/autoload.php
を読む必要があって、bootstrap.php ではそれをやってる。
<?php
declare(strict_types=1);
set_time_limit(0);
require __DIR__.'/../vendor/autoload.php';
phpunitコマンドを設定
毎度オプション付きでコマンドを叩くのは面倒なので、composer スクリプトに追加します。
npmでやってる感覚でできないのかなーと思ってたらできるようなので設定しました。
composer.json への書き込みは、composerコマンド経由で実施する記述がよく出てくるのですが、これについてはよくわからなかったので直接編集しました。
{
:
"scripts": {
"test": [
"phpunit tests/ --color"
]
}
}
これで composer test
を叩くだけで tests/
内のテストを実行できるようになりました。
設定ファイルで書いてるので諸々要らない気がします。
とりあえず、これで書く準備はできたはずなので、あとは tests/
にテストスクリプトを作って流していくだけ。
やってみて
Python(Django)アプリケーションでちょくちょくテストを書いていたんですが、PHPとなるとまたちょっと変わってるなって印象。
仕事としてはLaravelをやる機会が増えてくると思うので、fakerとかMockeryとかあの辺使いつつ、Laravelアプリケーションのテストをさっと書けるようになりたい。
またオライリーのやつ読もかな