PHPUnitはじめ
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便利だわ。頑張ろう。