php のテスティングフレーワークに phpunit がある。テスト環境は開発マシンに依存させず、簡単に構築できるようにしたいため docker を使って用意できるか試してみた。今回は、Dockerfile と composer を使って phpunit の実行環境を作ってみた。
Dockerfile で composer をインストール
phpunit は composer を使ってインストールするため、まずは docker container に composer をインストールしておく。インストールの仕方は、composer の公式にかかれているmulti-stage builds を使ってインストールする。
Dockerfileの中身
FROM php:7.2-cli
ENV COMPOSER_ALLOW_SUPERUSER 1
ENV COMPOSER_HOME /composer
ENV PATH $PATH:/composer/vendor/bin
# composer のインストール
COPY --from=composer /usr/bin/composer /usr/bin/composer
RUN apt-get update -yqq \
&& apt-get install git zlib1g-dev libsqlite3-dev -y \
&& docker-php-ext-install zip \
&& docker-php-ext-install pdo_mysql
WORKDIR /var/www
composer で phpunit をインストールする
phpunit を composer を使ってインストールする。
docker イメージの作成
先ほど作った Dockerfile からイメージを作成する。
docker build . -t php:composer
ホストディレクトリをマウントして container を起動する
ホストディレクトリをマウントして起動させる理由は、作成したコードとテストコードを container 内で実行できるようにするため。
docker run -it --rm -v $(pwd):/var/www php:composer /bin/bash
phpunit をインストールする
phpunit をインストールしましょう。composer.json を用意していたら composer install でインストールしましょう。
composer require --dev phpunit/phpunit
composer.json を使用する場合は下記の内容を記述し、composer installを実行
{
"require-dev": {
"phpunit/phpunit": "^8.4"
}
}
phpunit を実行する
実際に動くか試すため下記のコードを用意する
<?php
require('vendor/autoload.php');
use PHPUnit\Framework\TestCase;
class UserTest extends TestCase {
public function testExample() {
$expected = 'hoge';
$this->assertEquals($expected, 'hoge');
}
}
下記のコマンドからテストを実行する
vendor/bin/phpunit test.php
出力
root@4b1af08e1cd8:/var/www# vendor/bin/phpunit test.php
PHPUnit 8.4.3 by Sebastian Bergmann and contributors.
. 1 / 1 (100%)
Time: 257 ms, Memory: 4.00 MB
OK (1 test, 1 assertion)
root@4b1af08e1cd8:/var/www#