PHPUnit 12からのアトリビュート移行
2025.08.15 09:00
2025.08.15 11:20

PHPUnit 12に上げたら、テストクラスのコメントに書いていた @test
アノテーションが非推奨になっていてビックリしました。
調べてみたら、どうやらアトリビュート(#[Test]) に移行するのが正式ルートらしい。アトリビュートって最近のPHPの新機能らしいのだけれど、知らなかったので、この機会に置き換えて動かしてみました。
なにが変わったのか
従来(PHPUnit 11以前)
/** @test */
public function ユーザーが作成できること()
{
// ...
}
public function test_ユーザーが作成できること()
{
// ...
}
PHPUnit 12以降
use PHPUnit\Framework\Attributes\Test;
#[Test]
public function ユーザーが作成できること()
{
// ...
}
PHPUnit11以前だと、@testをコメントに入れるか、メソッド名の最初に「test_」をつけることでテストとして認識していましたが、12以降だと「 #[Test] 」を入れるようになったみたいです。
そして、これを使うためにuse PHPUnit\Framework\Attributes\Test;を読み込む必要があるようです。今まではなにもuseしなくても使えていましたが、、。
ただし、コメントやtest_タイプもWarnがでるだけで、いまのところ引き続き使うことはできます。まぁできるなら早めに移行できれば理想ですよね。
注意点
- PHPUnit 12 は 最低 PHP 8.2 が必要
- アトリビュートは 関数やメソッド宣言の直前 に書く
#[Test]
にすると、メソッド名にtest
プレフィックスは不要(逆にプレフィックスありでも動く)
正直、DocBlockのほうが見慣れてるので最初は違和感があります。
でも、コメントじゃなくコードとして明示されるのは確かにメリット。
IDEでのジャンプや補完も効きやすくなるし、テストのメタ情報がコードに近くなる感じがします。
移行自体は単純置き換えでOKなので、思ったよりハードルは低かったです。
今回は以上です!