PHPUnit Skeleton Generator

PHPUnit Skeleton GeneratorはPHPUnitのひな型を作成するツール。

以前は、phpunit --skeleton-testでひな型の作成ができていたが、今は使えなくなっているので下記を使うしかない。

インストール

前はpearからインストールできていたようだが、今はできないみたい。

  • composer
  • PAHR

上記のいずれかの方法でインストールする。

composerでインストール


{
    "require-dev": {
        "phpunit/phpunit-skeleton-generator": "*"
    }
}

勿論、グローバルにインストールも可能。

PHARでインストール


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

使用方法

以下のようなMsg.phpというクラスがあるものとする。


class Msg
{
    public function m()
    {
        return "hello";
    }
}

ひな型を作成。


$ phpunit-skelgen generate-test Msg
phpunit-skelgen 2.0.1 by Sebastian Bergmann.
Wrote skeleton for "MsgTest" to "/path/MsgTest.php".

MsgTest.phpが作成される。


class MsgTest extends PHPUnit_Framework_TestCase
{
    protected $object;

    protected function setUp()
    {
        $this->object = new Msg;
    }

    protected function tearDown(){}

    public function testm()
    {
        // 削除していいメソッド
        $this->markTestIncomplete(
            'This test has not been implemented yet.'
        );
    }
}

元クラスを読み込むrequireは自動で挿入されないので、自分で書く必要がある。

phpunit-skelgen generate-testのオプションやphpunit--bootstrapオプションがあるので、そちらでオートロードを実装なりすればいいみたい。

アノテーション

@assertアノテーションを埋め込むことでテストメソッドの中身まで生成できる。


/**
 * @assert (10) == '偶数'
 * @assert (11) == '奇数'
*/
public function c($n)
{ 
    $k;
    if (($n%2)==0) {
        $k = '偶数';
    } else {
        $k = '奇数';
    }
    return $k;
}

以下のような内容がテストメソッド内に記述される。


/**
 * Generated from @assert (10) == '偶数'.
 *
 * @covers Check::c
*/

public function testC()
{
    $this->assertEquals(
        '偶数',
        $this->object->c(10)
    );
}

/**
* Generated from @assert (11) == '奇数'.
*
* @covers Check::c
*/
public function testC2()
{
    $this->assertEquals(
        '奇数',
        $this->object->c(11)
    );
}

その他のアノテーション

アノテーションはひな形作成時にアサーションメソッドに変換されており、上記の他にも書き方が色々ある。

アノテーション 変換後の内容
@assert (…) == X assertEquals(X, method(…))
@assert (…) != X assertNotEquals(X, method(…))
@assert (…) === X assertSame(X, method(…))
@assert (…) !== X assertNotSame(X, method(…))
@assert (…) > X assertGreaterThan(X, method(…))
@assert (…) >= X assertGreaterThanOrEqual(X, method(…))
@assert (…) < X assertLessThan(X, method(…))
@assert (…) <= X assertLessThanOrEqual(X, method(…))
@assert (…) throws X @expectedException X

コメントする




2 × 5 =