📌

PHPUnitには @testdox を使え

2023/06/19に公開

日本語メソッド名なんてもうやめろ

開発のガイドラインや実際のソースコードを読んでいて以下のようなものを発見する。

./sampleTest.php
public function test_aとbが完全一致しているか返すテスト(string a, string b){
・・・
}

(ノ∀`)アチャー

日本語メソッド名という駄目な風習がここにも蔓延していたか。
一時期爆発的に流行ったんよね。
当初から キモ過ぎて 嫌だったんだが。

PHPUnit5 までは手段がなかった。
ただ、ver6以降は代替手段が増えたので移行すべきだ。

それが

@testdox

ヾ(・ω<)ノ" 三三三● ⅱⅲ コロコロ♪

------------------- ↓ 本題はここから ↓-------------------

まずは実行

現行のテストの状態でいいので、
まずは実行してみるとよい。
PHPUnitはコマンド打つとエラーがない限り経過がわからないが、
こちらは現在実行している内容まで把握できる。

testdoxオプションなし

bash
docker-compose exec app vendor/bin/phpunit
 PHPUnit 6.5.13 by Sebastian Bergmann and contributors.

 Runtime:       PHP 7.4.33
 Configuration: /app/phpunit.xml

 .                                                                   1 / 1 (100%)

 Time: 15 ms, Memory: 4.00MB

 OK (1 test, 1 assertion)

testdoxオプションあり

bash
docker-compose exec app vendor/bin/phpunit --testdox
 PHPUnit 6.5.13 by Sebastian Bergmann and contributors.

 Runtime:       PHP 7.4.33
 Configuration: /app/phpunit.xml

 s\HelloWorld
  [x] Say hello world

「Say hello world」というテストが実行され成功したということが記述でわかる

データプロバイダ使用するときは引数を取り込むことができる
Jestのeachに近い感じ

testAddTest.php
/**
 * @dataProvider additionProvider
 * @testdox Adding $a to $b results in $expected for $_dataName
 */
public function testAdd($a, $b, $expected)
{
    // test code
}
public function additionProvider()
{
    return [
        'data set 1' => [0, 0, 0],
        'data set 2' => [0, 1, 1],
        'data set 3' => [1, 0, 1],
        'data set 4' => [1, 1, 3]
    ];
}

Discussion