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() instead
Code 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.x | PHPUnit 8.x | PHPUnit 9.x |
文字列に含まれるか | $this->assertContains('PHP', 'PHPUnit') | OK | 非推奨 | 廃止 |
配列に含まれるか | $this->assertContains('PHP', ['PHP', 'PHPUnit']); | OK | OK | OK |
Warningの出たファイルだけを置換します。
sed -i s/assertContains/assertStringContainsString/ \
app/xxx/yyy/fugaTest.php
Code language: Bash (bash)