PHPUnit の各バージョンについて調べてみた

  • 13
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

概要

PHPUnit がバージョン上がって追加された新機能、使いこなしてないことが多いように思えましたので、各バージョンで何が増え、何が変わったのか、リリースノートから抽出して、特に美味しそうな項目をまとめて、簡単に解説してみます(多いので勝手ながら、使えそうなものを選んでます)。

PHPUnit 4.0.0

新機能

  • テストプロキシ : 元のクラスのメソッドを模倣(そのまま呼ぶ?)してくれるモック。
  • willReturn*() : will($this->returnValue($value))willReturn($value) と書けるように。他にも willReturn シリーズが各種用意されている。

下位互換の問題

  • static のモック/スタブのサポートが限定的に。今後は、同じクラスの別メソッドから呼ばれるときしか機能しない。

PHPUnit 4.1.0

新機能

  • マッチャ withConsecutive() : 呼ばれるごとに期待する引数が異なる場合にまとめて指定できる。これは便利。下記のように書ける:
$mock = $this->getMock('stdClass', array('foo'));
$mock
    ->expects($this->any())
    ->method('foo')
    ->withConsecutive(
        ['bar'], //1回目の呼び出し : $mock->foo('bar')
        [21, 42] //2回目の呼び出し : $mock->foo(21, 42)
    );

※ 上記は Framework_MockObject_Matcher_ConsecutiveParametersTest より引用。

PHPUnit 4.2.0

新機能

  • atLeast()atMost() 追加 : 前までは atLeastOne() (少なくとも1回は呼ばれること)ならあったが、回数の明示や、「多くとも」の指定はできなかった。
  • assertTag()assertSelect*() が非推奨に: 今後は phpunit-dom-assertions を使えということらしい。

PHPUnit 4.3.0

新機能

  • @expectedExceptionMessageRegExp 追加 : 正規表現で例外のメッセージ指定できるようになる。

PHPUnit 4.4.0

新機能

  • assertArraySubset() 追加 : 配列を含むかをアサーションする。(参考: マニュアル)

PHPUnit 4.5.0

新機能

  • Prophecy サポート : テストがより見やすく書けるかも。

PHPUnit 4.6.0

特に面白いものは無し。

PHPUnit 4.7.0

新機能

  • HTMLのコードカバレッジレポートで large tests(薄緑)、medium tests(普通の緑)、small tests(濃い緑) に色別されるようになった。

下位互換の問題

  • @small, @medium, @large を記載していないテストはすべて @small 扱いになる。

PHPUnit 4.8.0

新機能

  • @testWith 追加 : @dataProvider のデータをコメント上に書ける。便利そう。
/**
 * @testWith [0, 0, 0]
 *           [0, 1, 1]
 *           [1, 2, 3]
 *           [20, 22, 42]
 */
public function testAdd($a, $b, $c)

(単体テストより抜粋)

下位互換の問題

  • assertContains()assertNotContains() のチェックがより厳密に。
  • デフォルトのグループ名が __nogroup__ から default に変更。

PHPUnit 5.0.0

新機能

  • @depends でディープクローンできるように。
  • @depends で渡されたモックオブジェクトの期待チェックが、依存先でも評価されるように。

下位互換の問題

  • コードカバレッジ解析のためのホワイトリストの設定が必須になる。

サポート対象

  • PHP 5.3, 5.4, 5.5 はサポート対象外となり、PHP 7 がサポート対象となる! (つまり PHP 5.6 と 7 が対象。)

こんな感じで!。