Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何测试每一行是否抛出相同的异常?_Php_Unit Testing_Phpunit - Fatal编程技术网

Php 如何测试每一行是否抛出相同的异常?

Php 如何测试每一行是否抛出相同的异常?,php,unit-testing,phpunit,Php,Unit Testing,Phpunit,我想测试我的函数是否拒绝所有非正整数。它抛出一个InvalidArgumentException。我写了一个这样的测试: /** * @test * @expectedException InvalidArgumentException */ public function testXThrowsException() { $this->parser->x(1.5); $this->parser->x('2'); $this->pars

我想测试我的函数是否拒绝所有非正整数。它抛出一个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);
}
/**
 * @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) {}

}
我的测试总是通过,因为第一个测试抛出一个异常。其他人没有得到适当的测试。我可以添加
$this->parser->x(1)到我的代码,它仍然会通过


我应该怎么做才能断言所有这些函数调用都会引发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);
}
/**
 * @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()

测试就会失败。如果有很多负值,也可以将它们放入数组中,并使用以下代码在数组上循环(无需测试):

稍微短一点