kazu22002の技術覚書

PHPer, Golang, AWS エンジニアの日々

PHPUnitはじめ

f:id:kazu22002:20181001212202p:plain

PHPUnitのホームペーシをみて、動作させてみるところまでやってみます。

開発環境はMacを使用して、composerを用いています。

まずは「Hello World!」的なことからやってみる。という最初の壁を超えてみます。

Getting Started

最新バージョンはPHPUnit7ということで、PHPUnit7の「Getting Started」をやってみました。

PHPUnit – The PHP Testing Framework

ほぼ手順通りにやれば、いけたのでDockerでも使って環境ごと作ってしまいます。

php7のdockerファイル

以前作ったDockerfileを流用して、ちゃちゃっと作りました。docker-composeを利用していますが、php7のDockerfileを載せておきます。

FROM php:7.2.9-fpm-alpine

RUN apk add --no-cache $PHPIZE_DEPS curl \
    && pecl install xdebug \
    && docker-php-ext-install mbstring \
    && docker-php-ext-enable xdebug

# install composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

COPY ./php.ini /usr/local/etc/php/
COPY ./xdebug.ini /usr/local/etc/php/conf.d/xdebug.ini

WORKDIR /var/www/html

最初のうちは、alpineをやめたほうがいいんじゃないかと最近は思っています。慣れてきたらalpineのほうが実運用として良さそうだと思っています。

プロジェクト自体はgithubを参考にしてもらえれば、docker-composeの内容が確認できます。

PHPUnitの実行

cd docker

docker-compose up -d

composer require --dev phpunit/phpunit ^7

# composer.json編集
vi composer.json

composer dump-autoload

./vendor/bin/phpunit --bootstrap vendor/autoload.php tests/EmailTest

./vendor/bin/phpunit --bootstrap vendor/autoload.php --testdox tests

exit

composer.jsonの編集部分だけ、実行した後にsrcフォルダをパスに含める必要があるため、dump-autoloadを追加しています。

{
    "autoload": {
        "classmap": [
            "src/"
        ]
    },
    "require-dev": {
        "phpunit/phpunit": "^7"
    }
}

●実行結果1

/var/www/html # ./vendor/bin/phpunit --bootstrap vendor/autoload.php tests/Email
Test
PHPUnit 7.3.5 by Sebastian Bergmann and contributors.

...                                                                 3 / 3 (100%)

Time: 376 ms, Memory: 4.00MB

OK (3 tests, 3 assertions)
/var/www/html #

●実行結果2

/var/www/html # ./vendor/bin/phpunit --bootstrap vendor/autoload.php --testdox t
ests
PHPUnit 7.3.5 by Sebastian Bergmann and contributors.

Email
 ✔ Can be created from valid email address
 ✔ Cannot be created from invalid email address
 ✔ Can be used as string

Time: 345 ms, Memory: 4.00MB

OK (3 tests, 3 assertions)
/var/www/html #

ファイル指定の実行と、testsフォルダ配下の実行のパターンですね。

実運用時にはtestsフォルダ配下をすべて実行するのが、ベストプラクティスですかね。

状況により使い分けれるようにしておこうと思います。

感想

簡単なテストコードの実施ですが、本当に簡単なことを確認しているイメージで、いままでの関数でいろいろとやりすぎている状態だと効果が低いと感じました。

やっぱり関数自体の機能をもっと完結にする必要性を感じました。

Exceptionも試せるし、値に対する結果チェックでテストをしていくイメージはできました。

簡単なクラスなら試せそうだな。リファクタをしながらになりそうだけど、リファクタでエラーがないことを願うしかないかな・・・。

まずは新規機能からの導入が良さそうかな。既存は慣れてからが良さそう。無茶はしないで効果を出していこう。

なにごともやってみれば、最初は簡単なんだな。やっぱり本格的になったときに、どこかに壁があるんだろうなぁ。

そしてDocker便利だわ。頑張ろう。

実行したプロジェクト

github.com