phpunitでprivateメソッドのテストをする

phpunitでclassのprivate methodをテストしたいときはPHP: ReflectionMethod – Manualを使うとできます

SampleクラスのisValidメソッドへ引数を渡してテストするなら

$class = new Sample();
$arr = ['arg' => 100];
$method = new ReflectionMethod(get_class($class), 'isValid');
$method->setAccessible(true);
$result = $method->invoke($this->csv, $arr);
$this->assertTrue($result);

といった形です

phpunitを使ってテストをするための環境を用意する

phpunitを使ってテストをするための環境を整えました
今回はPHPフレームワークは使ってないです

composerが使える前提で、composerで入れます
その前にphpのバージョンを確認

$ php -v

PHP 5.5.31-1+deb.sury.org~trusty+1 (cli) (built: Jan  7 2016 15:26:28) 
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2015 Zend Technologies
    with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2015, by Zend Technologies

5.5なので、対応したバージョンのphpunit 4を入れます

$ composer init

で適当に設定しておいて

$ composer require –dev “phpunit/phpunit:4.*”

これでphpunitがvendorディレクトリに用意されました

実行するには

$ vender/bin/phpunit

で動きます

実際にサンプルのテストを用意してみます
testsディレクトリにstackTestというサンプルを用意するとして

$ mkdir tests
$ vim tests/stackTest.php

<?php
class StackTest extends PHPUnit_Framework_TestCase
{
    public function testPushAndPop()
    {
        $stack = array();
        $this->assertEquals(0, count($stack));

        array_push($stack, 'foo');
        $this->assertEquals('foo', $stack[count($stack)-1]);
        $this->assertEquals(1, count($stack));

        $this->assertEquals('foo', array_pop($stack));
        $this->assertEquals(0, count($stack));
    }
}

コードは、PHPUnit マニュアル – 第2章 PHPUnit 用のテストの書き方の転載です

実行する際は、requireを自動でしてくれるautoload.phpを読み込んで実行します

$ ./vendor/bin/phpunit –bootstrap ./vendor/autoload.php tests

PHPUnit 4.8.21 by Sebastian Bergmann and contributors.

.

Time: 102 ms, Memory: 3.75Mb

OK (1 test, 5 assertions)

テストの準備が出来ました