開発

PHPUnitで単体テスト環境をサクッと構築

本業リモートエンジニア、副業リモートエンジニアのエンジニアよりの自称ペンギンです。

blank
ペソギン

PHPは何となくでも動くからC言語から入った私としては仲良くなれる気がしない存在。

とはいえ、単体テスト用のコードを書いて小さく作って動かせばそんな予期しない動作も事前に検知できるでしょ!という気持ちで備忘録がてらPHPUnitで単体テスト環境を構築する手順を残しておきます。

環境

・Mac
・Docker

サクッとするなら

blank
ペソギン

githubにアップしているのでコードを取ってくれば簡単に動かせます。

コードのダウンロード

https://github.com/pesoguinC/php-unit-test

コンテナのビルド

docker-compose up --build

テスト実行

docker-compose exec apach bash -c "vendor/bin/phpunit SampleTest.php"

ファイル構成

blank
ペソギン

作成するファイルの構成は以下です。

├── 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"
blank
ペソギン

上記のコマンドを実行すると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
blank
ペソギン

それでは楽しいPHPライフを....

blank 1

本業リモートエンジニア、副業リモートエンジニアのエンジニアよりの自称ペンギンです。 通勤時間、社内設備に不満を抱える状況 ...

blank 2

毎日、毎日パソコンと睨めっこしてると緑が恋しくなるので、今年は作業部屋のベランダにすいかを植えて育てています。 今回は家 ...

blank 3

子供が家に帰ってきているかや様子を見たいけど、キッズ携帯や固定電話をわざわざ契約するのは微妙だなと思っていたこの頃。 ア ...