我想测试我的函数拒绝所有非正整数。它会抛出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?
答案 0 :(得分:2)
/**
* @test
* @expectedException InvalidArgumentException
*
* @dataProvider foo
*/
public function testXThrowsException($value)
{
$this->parser->x($value);
}
/**
* Test data
* Returns array of arrays, each inner array is used in
* a call_user_func_array (or similar) construction
*/
public function foo()
{
return array(
array(1.5),
array('2'),
array(1000E-1),
array(+100)
);
}
答案 1 :(得分: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()
进行测试失败。
答案 2 :(得分:0)
如果您有很多负值,您也可以将它们放在一个数组中,并使用以下代码循环遍历数组(不进行测试):
foreach($wrongValueArray as $failtyValue) {
try { $this->parser->x($failtyValue);
this->fail($failtyValue . ' was correct while it should not');
} catch (InvalidArgumentException $e) {}
}
它有点短