web-dev-qa-db-ja.com

エラーphpunitをスローするためのモックメソッド

PHPUnitでは、次のいずれかを使用して、例外をスローするメソッドスタブを作成できます。

  • [->will($this->throwException(..)][1]
  • ->willThrowException(..

メソッドスタブがPHPエラーをスローするいくつかのケースをテストする必要があります。

PHPUnitはこのようなものをサポートしていますか?ここに回避策はありますか?

10

PHPUnit TestCaseクラスのthrowException()は、Throwableのインスタンスをparamとして使用できます。

これの意味は、

->will($this->throwException(new Error()));
->will($this->throwException(new Exception()));

両方とも有効です

9

次のように、テスト内の関数に例外をスローさせることができます。

$handlerConsentMessage = $this->getMockBuilder('YourClass')
            ->setMethods(array('yourMethod'))->getMock();

$handlerConsentMessage->method('yourMethod')->willThrowException(new Exception());

$handlerConsentMessage->run('functionToRun');

これで、テスト関数functionToRunを実行すると、関数YourMethodが呼び出された場合、例外がスローされます。

6
Matt Doran

エラーをトリガーするだけです:

$foo
    ->expects($this->once())
    ->method('bar')
    ->willReturnCallback(function () {
        trigger_error(
            'Now really is not a good time',
            E_USER_ERROR
        );
    });

参照については、以下を参照してください。

2
localheinz