SimpleTest:PHPエラーがスローされたことをアサートする方法は?

StackOverflow https://stackoverflow.com/questions/612217

  •  03-07-2019
  •  | 
  •  

質問

私が正しい場合、SimpleTestはPHPエラーがスローされたことをアサートすることを許可します。しかし、ドキュメントに基づいて、それを使用する方法を理解することはできません。コンストラクターに渡すオブジェクトが MyOtherObject

のインスタンスであることをアサートしたい
class Object {
    public function __construct(MyOtherObject $object) {
        //do something with $object
    }
}

//...and in my test I have...
public function testConstruct_ExpectsAnInstanceOfMyOtherObject() {
    $notAnObject = 'foobar';
    $object = new Object($notAnObject);
    $this->expectError($object);
}

どこがおかしいのですか?

役に立ちましたか?

解決

タイプヒントはE_RECOVERABLE_ERRORをスローします。これは、PHPバージョン5.2以降のSimpleTestでキャッチできます。次は、「のインスタンスでなければなりません」というテキストを含むエラーをキャッチします。 PatternExpectationのコンストラクターはperl正規表現を取ります。

public function testConstruct_ExpectsAnInstanceOfMyOtherObject() {
    $notAnObject = 'foobar';
    $this->expectError(new PatternExpectation("/must be an instance of/i"));
    $object = new Object($notAnObject);
}

他のヒント

PHPにはエラーと例外の両方がありますが、動作は少し異なります。間違った型をtypehinted関数に渡すと、例外が発生します。テストケースでそれをキャッチする必要があります。例:

public function testConstruct_ExpectsAnInstanceOfMyOtherObject() {
  $notAnObject = 'foobar';
  try {
    $object = new Object($notAnObject);
    $this->fail("Expected exception");
  } catch (Exception $ex) {
    $this->pass();
  }
}

または単に:

public function testConstruct_ExpectsAnInstanceOfMyOtherObject() {
  $this->expectException();
  $notAnObject = 'foobar';
  $object = new Object($notAnObject);
}

ただし、これにより、例外が発生した行の後のテストが停止することに注意してください。

実際、SimpleTestはこれをサポートしていません。 SimpleTestで致命的なPHPエラーをキャッチすることはできません。型ヒントは、テストできないことを除いて素晴らしいです。型ヒントは致命的なPHPエラーをスローします。

エラーが発生する前に予期する必要があります。その後、SimpleTestはエラーを飲み込んでパスをカウントします。テストが終了し、エラーがなければ失敗します。 (PHP(致命的ではない)エラーと例外に対して、それぞれ同じように動作するexpectErrorとexpectExceptionがあります。)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top