本業リモートエンジニア、副業リモートエンジニアのエンジニアよりの自称ペンギンです。
PHPは何となくでも動くからC言語から入った私としては仲良くなれる気がしない存在。
とはいえ、単体テスト用のコードを書いて小さく作って動かせばそんな予期しない動作も事前に検知できるでしょ!という気持ちで備忘録がてらPHPUnitで単体テスト環境を構築する手順を残しておきます。
環境
・Mac
・Docker
サクッとするなら
githubにアップしているのでコードを取ってくれば簡単に動かせます。
コードのダウンロード
https://github.com/pesoguinC/php-unit-test
コンテナのビルド
docker-compose up --build
テスト実行
docker-compose exec apach bash -c "vendor/bin/phpunit SampleTest.php"
ファイル構成
作成するファイルの構成は以下です。
├── docker-compose.yml
├── docker-entrypoint.sh
├── dockerfile
└── html
├── SampleTest.php
├── index.php
└── sample.php
各ファイルの中身
ここからは各ファイルの中身を紹介します。
docker-compose.yml
version: '3' services: apach: container_name: unit-test-php build: ./ ports: - 81:80 volumes: - ./html:/var/www/html
docker-entrypoint.sh
docker起動時に実行される魔法。初回起動時にvendorディレクトリが作成されるはずなので、vendorディレクトリがない場合のみphpunitのインストールコマンドを実行する。
#!/bin/bash if [ ! -d "/var/www/html/vendor" ]; then curl -sS https://getcomposer.org/installer | php \ && php /var/www/html/composer.phar require --dev phpunit/phpunit fi exec "apache2-foreground"
dockerfile
何の変哲もないdockerfile
FROM php:7.4-apache RUN apt-get update \ && apt-get install -y \ zip \ unzip WORKDIR /var/www/html COPY docker-entrypoint.sh /tmp ENTRYPOINT ["/tmp/docker-entrypoint.sh"]
html/SampleTest.php
テストファイル
<?php use PHPUnit\Framework\TestCase; require_once 'sample.php'; class SampleTest extends TestCase { public function testSample() { $sample = new sample\Sample(); // helloWorldの戻り値を確認 $this->assertSame($sample->helloWorld(), 'こんにちは世界'); } }
html/index.php
localhost:81にアクセスすると 'こんにちは世界' が表示されることの確認用コード(テストには無関係)
<?php require_once 'sample.php'; $sample = new sample\Sample(); echo $sample->helloWorld();
html/sample.php
テスト対象のソースコード。
<?php namespace sample; class Sample { public function helloWorld() { return 'こんにちは世界'; } public function name() { return 'ペソギン'; } }
実行
docker-compose exec apach bash -c "vendor/bin/phpunit SampleTest.php"
上記のコマンドを実行するとPHPの単体テスト実行結果が以下のように成功されます。
PHPUnit 9.5.11 by Sebastian Bergmann and contributors.
. 1 / 1 (100%)
Time: 00:00.070, Memory: 4.00 MB
補足:コンテナに入る場合
docker-compose exec apach bash
それでは楽しいPHPライフを....