PHPUnitでassert()がコケることをテストする
やりたいこと
PHP7.1
、PHPUnit 7.2
で
class Foo {
public static function bar(string $a){
assert($a === "po");
echo $a;
}
}
を
class FooTest extends TestCase{
/**
* @test
*/
public function barの引数がおかしい(){
Foo::bar("hoge");
}
}
みたいにテストしたい
解決策
class FooTest extends TestCase{
protected function setUp(){
assert_options(ASSERT_ACTIVE,true);
assert_options(ASSERT_EXCEPTION,false);
parent::setUp();
}
/**
* @expectedException \PHPUnit\Framework\Error\Warning
* @test
*/
public function barの引数がおかしい(){
Foo::bar("hoge");
}
}
解説
assert()
は、zend.assertions
が1かつassert.exception
が0のとき、Fatal error
で死なずにWarning
を出します。
PHPマニュアルにもあるように、本当はphp.ini
でこれを制御します。しかし、たぶん本番環境ではzend.assertions
は0だし開発環境ではassert.exception
は1なので、テストの時だけこれを変更するために非推奨のassert_options()
を使います。
PHPUnit
では、Fatal
以外のエラーを例外に変換してくれるので、@expectedException
にWarning
を書けばassert()
が働いていることを確認できます。
おわりに
assert()
自体がテストなのにPHPUnit
でそれをテストするの、本末転倒感がある。
Author And Source
この問題について(PHPUnitでassert()がコケることをテストする), 我々は、より多くの情報をここで見つけました https://qiita.com/sudnonk12/items/4462146e52611f645f05著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .