開発

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

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

管理人

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ライフを....

1

iPhoneは種類が多すぎて何が違うのかが分からない。どれを選べば良いのか分からない。そんな方のためにiPhone 7 8 XR 11 SE2の中でおすすめしたい機種を用途別にお伝えしたいと思います。 ...

2

新しくパソコンが欲しいのだけど、WindowsとMacのどちらを買った方が良いのだろう。。。 というか、私の場合はどちらを選ぶべきなのだろうか? 皆さんはWindowsをMacどちらを買った方が良いの ...

3

iPhoneXRを使い続けて気づけば、約10ヶ月も経ちました。 最初は重くて重くて重くて、大きくて非常に使いづらかったのですが...使い続けるうちに馴染んでいき、遂には最高の相棒にまで昇格してしまいま ...

4

新型iPhone 11はApple Store + 格安SIM(UQモバイル/Y!mobile)で運用すべきか??? ソフトバンクで購入すべきか悩んでいる方のためにどちらがおすすめかを判断する情報をご ...

5

iPhoneXRスマホ代が高いから、格安SIMに移行しよう。 そんな方々に一部私のやらかしを含めて格安SIMに移行する際の注意点をご紹介します。 注意点 ここからは、iPhoneを格安SIMで使用する ...