PHPUnit入門の入門

Published: 2016年2月25日 by tomsato

◼︎ 概要

PHPUnitについて入門の入門としてまとめます

ユニットテストやPHPUnitの概要からメリット、インストール方法や使い方など軽くまとめます

◼︎ ユニットテストとは

ユニットテスト(単体テスト)とはクラスや関数などプログラムを構成する小さな単位(ユニット)で個々の動作を確認するためのテスト

◼︎ PHPUnitとは

PHPでの単体テストをテストするツールである
名前の通りPHPで記述する

◼︎ PHPUnitのメリット

  • クラス、関数単位で動作を確認できる
  • コマンドで楽に実行できる
  • Jenkinsと連携して自動化できる
  • PHPUnitを見てソースコードの挙動がわかったりする
  • テスト効率が向上するので精神的にゆとりができる
  • テストをしていることで品質を確保することができる

◼︎ 実際に触ってみる

インストール方法

$ wget https://phar.phpunit.de/phpunit.phar
$ chmod +x phpunit.phar
$ sudo mv phpunit.phar /usr/local/bin/phpunit
$ phpunit --version
PHPUnit 5.2.9 by Sebastian Bergmann and contributors.

ソースコードをとりあえず用意する

<?php
/**
 * 四則演算を行うクラス
 */
class Arithmetic
{
    /**
     * 足し算
     */
    public function add($x, $y) {
        return($x + $y);
    }

    /**
     * 引き算
     */
    public function subtract($x, $y) {
        return($x - $y);
    }

    /**
     * 掛け算
     */
    public function multiply($x, $y) {
        return($x * $y);
    }

    /**
     * 割り算
     */
    public function divide($x, $y) {
        return($x / $y);
    }
}

このソースコードのテストスクリプトを用意する
最初なので空のテストを実行させる

<?php
require_once 'Arithmetic.php';
class ArithmeticTest extends PHPUnit_Framework_TestCase {

}

空なので失敗扱いされる
phpunit1
もう少しちゃんと書いてみる

<?php
require_once 'Arithmetic.php';
class ArithmeticTest extends PHPUnit_Framework_TestCase {
    /** 
     * @var Arithmetic 
     */ 
    protected $object;

    /** 
     * setUpは各テストメソッドが実行される前に実行する 
     */ 
    protected function setUp() { 
        // テストするオブジェクトを生成する
        $this->object = new Arithmetic();
    }

    /**
     * 足し算関数の検証
     */
    public function testAdd() {
        // 引数に3,5を渡すと8が返ってくることを確認する
        $this->assertEquals(8, $this->object->add(3, 5));
        // 引数に15,30を渡すと45が返ってくることを確認する
        $this->assertEquals(45, $this->object->add(15, 30));
    }

    /**
     * 引き算関数の検証
     */
    public function testSubtract() {
        // 引数に10,3を渡すと7が返ってくることを確認する
        $this->assertEquals(7, $this->object->subtract(10, 3));
        // 引数に3,9を渡すと-6が返ってくることを確認する
        $this->assertEquals(-6, $this->object->subtract(3, 9));
    }

    /**
     * 掛け算関数の検証
     */
    public function testMultiply() {
        // 引数に4,6を渡すと24が返ってくることを確認する
        $this->assertEquals(24, $this->object->multiply(4, 6));
        // 引数に4,-5を渡すと-20が返ってくることを確認する
        $this->assertEquals(-20, $this->object->multiply(4, -5));
    }

    /**
     * 割り算関数の検証
     */
    public function testDivide() {
        // 引数に6,2を渡すと3が返ってくることを確認する
        $this->assertEquals(3, $this->object->divide(6, 2));
        // 引数に6,6を渡すと1が返ってくることを確認する
        $this->assertEquals(1, $this->object->divide(6, 6));
    }
}

今回はOKになっている
phpunit2

assertEqualsとはアサーションのひとつで2つの変数が等しくない場合にエラーを出す
他にも沢山のアサーションがあるが詳しくはこちら:付録A アサーション

コードカバレッジも出せるがXdebugやtokenizerが必要みたいなのでまた別の機会に調べる

◼︎ 参考

コメントを書く

※ 個別に返信が必要な時のみご記入ください

※ Emailは公開されません

※ 承認されると名前・コメントが下記に表示されます

コメント一覧

最近の投稿

ビジュアルリグレッションテストについてまとめ、ネットで調べると数多くのライブラリがありどれがどんな立ち位置なのか全体像がわかりずらかったのでどんな種類があるのか入門の入門としてまとめます、またPlaywrightを使って実際に触ってみました

社内ツールなどの超小規模なAPIをGolangで実装する際にフレームワークを使うべきかを、実際にnet/httpを使った実装とフレームワークを使った実装を比較することでどれだけ優位性があるかを見ていきたいと思います。今回はフレームワークにはシンプルで使いやすそうなEchoを使うことにします。

vue-pdfを使ってNuxt.jsで作成しているアプリケーションに pdfスライドを表示させるサンプルを作成しました README.md通りに実装してもうまくいかないところがあったのでそのあたり含めてまとめます

Vue.js / Nuxt.jsにおけるログインの実装方法をまとめる Auth0やNuxt.jsのAuth Moduleとmiddlewareについて調べつつサンプルを作成することで理解を深める

コンポーネント設計について考える Atomic DesignやPresentational Component, Container Componentについてまとめつつ 自分だったらVue.js / Nuxt.jsでどういうコンポーネント設計にするかについてまとめます

カテゴリ一覧

タグ一覧