PHPUnit 8で assertContainsが非推奨のWarning

PHPUnit 7からPHPUnit 8へアップデートしたら、テストで次のWarningが出ました。

Using assertContains() with string haystacks is deprecated and will not be supported in PHPUnit 9. Refactor your test to use assertStringContainsString() or assertStringContainsStringIgnoringCase() insteadCode language: plaintext (plaintext)

プロジェクト内のテストを assertContains で検索すると、Warningの出たテストはもちろんヒットしますが、他のテストでもassertContainsがヒットしました。なぜWarningの出るテストと出ないテストがあるんだろう?

非推奨Warningの出るテスト

$needle   = 'PHP';
$heystack = 'PHPUnit';
$this->assertContains($needle, $heystack);Code language: PHP (php)

非推奨Warningの出ないテスト

$needle   = 'PHP';
$heystack = ['PHP', 'PHPUnit'];
$this->assertContains($needle, $heystack);Code language: PHP (php)

むむむ...
文字列に含まれるかを調べると、Warningが出る。
配列に含まれるかを調べるのは、Warningは出ない。
ということかな?

あらためてWarning内容を見ると

Using assertContains() with string haystacks is deprecated
(assertContainsの第2引数 heystack に文字列を渡すのは非推奨)

なるほど〜

つまり

検証したいことPHPUnit 7.xPHPUnit 8.xPHPUnit 9.x
文字列に含まれるか$this->assertContains('PHP', 'PHPUnit')OK非推奨廃止
配列に含まれるか$this->assertContains('PHP', ['PHP', 'PHPUnit']);OKOKOK

Warningの出たファイルだけを置換します。

sed -i s/assertContains/assertStringContainsString/ \
  app/xxx/yyy/fugaTest.phpCode language: Bash (bash)
タイトルとURLをコピーしました