3
3

More than 1 year has passed since last update.

DockerでPHPUnitを少し使ってみる(Composer使用)

Last updated at Posted at 2021-02-28

#はじめに
Dockerをある程度使える前提で書いていきます。

『DockerでPHPUnitを少しさわってPHPのテスト少し試してみたい!』方向けです。

よろしくお願いします!:bow_tone1:

★テスト記述する際のお決まり事項
・Class という名前のクラスのテストは、ClassTest という名前のクラスに記述
・ClassTest は、(ほとんどの場合) PHPUnit\Framework\TestCase 
・テストは、test* という名前のパブリックメソッドとなります。(なのでtestSample()やtestA()という書き方になる)
・テストメソッドの中で assertSame() のようなアサーションメソッド (アサーション を参照ください) を使用して、期待される値と実際の値が等しいことを確かめます。

★ユニットテストを書くそもそもの目的
バグの発見と修正や コードのリファクタリングを開発者がやりやすくすること。
ソフトウェアのドキュメントとしての役割を果たすこと。
私的には同じバグを繰り返さないために書くものという感じで理解しています。

★どこをテストすべきか
ひとつのユニットテストがカバーするのは、 通常はひとつの関数やメソッド内の特定のルートだけとなる

上記内容はほぼ以下URLからの参考です。
https://phpunit.readthedocs.io/ja/latest/writing-tests-for-phpunit.html

様々なチェックメソッドは以下
https://phpunit.readthedocs.io/ja/latest/assertions.html#appendixes-assertions

では早速

#環境作成

以下のようにファイルを作成して、『docker-compose.yml』ある場所でdocker-compose up --build -dを叩きます。
そうすると、<\>:81/simple以下のように表示されています。
※ポート(81の部分)は同じですがIpは各環境で違います。ちなみに私のipは$ docker-machine ip defaultで調べられます。意味は『defaultとして作成したドッカーマシンのip』

全体の構成参考画像

スクリーンショット 2021-02-28 19.49.46.png
index.php
<?php
require_once 'sample.php';

$sample = new sample\Sample();

echo $sample->a();
sample.php
<?php
namespace sample;

class Sample
{
    public function a()
    {
        return 'あ';
    }

    public function i()
    {
        return 'い';
    }
}
SampleTest.php
<?php
use PHPUnit\Framework\TestCase;

require_once 'sample.php';

class SampleTest extends TestCase
{
    public function testSample()
    {
        $sample = new sample\Sample();

        //同じ値、同じ型でない場合エラー
        $this->assertSame($sample->a(), 'あ');
    }
}
docker-compose.yml
version: '3'
services:
  apach:
    container_name: sample-apache #作成されていると出来ないので新しく作成する場合ここの名前を変更
    build: ./  #Dockerfileを使用してコンテナ作成
    ports:
      - 81:80
    volumes:
      - ./html:/var/www/html # コンテナ var/www/html の中に/htmlの中身を入れる
From php:7.4-apache

RUN apt-get update \
&& apt-get install -y \
zip \
unzip

WORKDIR /var/www/html

以下の表示は右記載でお願いします。 ===> <<ipアドレス>>:81/simple

スクリーンショット 2021-02-28 19.51.59.png

※以下に最終完成バージョンも含めてあげているので、もしよかったら参考にしていただければと思います。

#コンテナに入ってもう一仕事する

:sun_with_face:以下コマンド今使用しているコンテナIDの確認を行う
$ docker ps

:sun_with_face:コンテナ内に以下コマンドで入る、 ※『1999d283b4f9』は上記で出力したコンテナIDを使用してください
$ docker exec -i -t 1999d283b4f9 bash

:sun_with_face:コンテナ内で以下コマンドうちcomposerのインストール
$ curl -sS https://getcomposer.org/installer | php

:sun_with_face:composerのインストールが無事行えたら以下コマンドで『PHPUnit』のインストール
$ php composer.phar require --dev phpunit/phpunit
参考:https://phpunit.readthedocs.io/ja/latest/installation.html

:sun_with_face:全ての準備は出来た!テストコードは書いてあるので、以下コマンドをコンテナ内で実行しテスト実行してみる
$ vendor/bin/phpunit TEST/SampleTest.php
以下のようになればテスト行えたことが分かる

以下の表示は右記載でお願いします。 ===> $ vendor/bin/phpunit TEST/SampleTest.php

スクリーンショット 2021-02-28 20.03.20.png

テスト実行結果参考以下URL
https://phpunit.readthedocs.io/ja/latest/textui.html

表示 意味
. テストが成功した際に表示されます。
F アサーション失敗
E テストメソッドで何かしら失敗
I テストがふかんぜんまたは未実装

#最後に
以上終わりです!
書き足すことあるかもですが最初に書いたものは削除しない予定です!

後HTMLでコードガバレッジ出す記事も書いたのでもしよかったら見てください!

#参考
https://phpunit.readthedocs.io/ja/latest/installation.html

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3