Php 如何测试每一行是否抛出相同的异常?
我想测试我的函数是否拒绝所有非正整数。它抛出一个InvalidArgumentException。我写了一个这样的测试: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
/**
* @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()
测试就会失败。如果有很多负值,也可以将它们放入数组中,并使用以下代码在数组上循环(无需测试):
稍微短一点