2

関数が正でない整数をすべて拒否することをテストしたいと思います。InvalidArgumentException をスローします。私は次のようなテストを書きました:

/**
 * @test
 * @expectedException InvalidArgumentException
 */
public function testXThrowsException()
{
    $this->parser->x(1.5);
    $this->parser->x('2');
    $this->parser->x(1000E-1);
    $this->parser->x(+100);
}

最初のテストで例外がスローされるため、私のテストは常に成功します。他の人は適切にテストされません。コードに追加でき$this->parser->x(1);ますが、それでも合格します。

これらすべての関数呼び出しで InvalidArgumentException が発生すると断言するにはどうすればよいですか?

4

3 に答える 3

1

解決策は、次のように使用することです。

/**
 * @test
 */
public function testXThrowsException()
{
    try {
        $this->parser->x(1.5);
        $this->fail('message');
    } catch (InvalidArgumentException $e) {}
    try {
        $this->parser->x('2');
        $this->fail('message');
    } catch (InvalidArgumentException $e) {}
    try {
        $this->parser->x(1000E-1);
        $this->fail('message');
    } catch (InvalidArgumentException $e) {}
    try {
        $this->parser->x(+100);
        $this->fail('message');
    } catch (InvalidArgumentException $e) {}

}

これで、すべての行を個別にテストできます。メソッドが例外を発生さx()ないときはいつでも、テストは を使用して失敗しfail()ます。

于 2013-04-16T11:48:50.857 に答える