LoginSignup
6
9

More than 5 years have passed since last update.

Phalconを使用したUnitTest環境の整備(for Mac)

Last updated at Posted at 2016-07-01

Phalconを使用したUnitTest環境の整備(for Mac)

Phalconに依存したUnitTestを書く場合に、phalcon.soのExtensionが必要となる

Phalcon Extensionのインストール

開発環境にphalcon.soが必要なため事前にインストールを行う

Mac(El Capitan)

    brew tap homebrew/dupes
    brew tap homebrew/versions
    brew tap homebrew/php
    brew install php56-phalcon
  • brew info php56-phalconphalcon.so をさがす
    • 例) /usr/local/Cellar/php56-phalcon/2.0.13
  • php.iniphalcon.soのExctensionを足す
    extension=/usr/local/Cellar/php56-phalcon/2.0.13/phalcon.so
  • 確認
    # php -i | grep "phalcon => enabled"
    phalcon => enabled
  • composer install --dev を実行してテスト環境用のモジュールをインストールする。phpunitを実行するためにrequire-devのモジュールが必要となる。
composer.json
    "require-dev": {
        "mockery/mockery": "0.9.4",
        "phpunit/phpunit": "4.7.6",
        "phalcon/incubator": "^2.0"
    }
require_once APP_PATH . '/vendor/autoload.php';
...その他、PhalconのDIコンテナ作成など記述
  • phpunit.xmlの作成
phpunit.xml
<?xml version="1.0" encoding="UTF-8"?>
<phpunit
        bootstrap="bootstrap.php"
        colors="true"
        convertErrorsToExceptions="true"
        convertNoticesToExceptions="true"
        convertWarningsToExceptions="true"
        verbose="true"
        stopOnFailure="true"
        processIsolation="false"
        backupGlobals="false"
        syntaxCheck="true"
        >
    <testsuite name="sample tests">
        <directory>./tests</directory>
    </testsuite>
</phpunit>
  • テストコード作成
UnitTestCase.php
<?php

use Phalcon\Di;
use Phalcon\Test\UnitTestCase as PhalconTestCase;

class UnitTestCase extends PhalconTestCase
{
    /**
     * @var \Voice\Cache
     */
    protected $_cache;

    /**
     * @var \Phalcon\Config
     */
    protected $_config;

    /**
     * @var bool
     */
    private $_loaded = false;

    public function setUp()
    {
        parent::setUp();

        // テスト中に必要になる追加のサービスを読み込み
        $di = Di::getDefault();

        // ここで必要なDIコンポーネントを取得する。config があるなら、それを parent に渡すことを忘れずに

        $this->setDi($di);

        $this->_loaded = true;
    }

    public function testSimpleSample()
    {
        $this->assertEquals('works',
            'works',
            'This is OK'
        );
    }


    /**
     * Check if the test case is setup properly
     *
     * @throws \PHPUnit_Framework_IncompleteTestError;
     */
    public function __destruct()
    {
        if (!$this->_loaded) {
            throw new \PHPUnit_Framework_IncompleteTestError('Please run parent::setUp().');
        }
    }
}
  • 実行
    • phpunit.xmlがある場所で
    • vendor/phpunit/phpunit/phpunit tests/Test.php
    • 自分のローカルにインストールした(パスが通っている)phpunitとcomporserで指定したphpunitとのバージョンの違いに注意すること

PHPUnit用テストの書き方の基本

  1. Class という名前のクラスのテストは、ClassTest という名前のクラスに記述
  2. テスト用のメソッドには、test* という名前で始まるパブリックメソッドにする
  3. テストメソッドの中で assertEquals() のようなアサーションメソッドを使用して、期待される値と実際の値が等しいことを確かめる

see https://phpunit.de/manual/current/ja/writing-tests-for-phpunit.html

6
9
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
6
9