我有一个PHPUnit测试,循环遍历一个无效值数组,并断言每个函数都正确拒绝了.
例如,validateInput仅当输入是字符串时才返回true,否则返回false.
public function testValidateInput()
{
$obj = new MyClass();
$data = [
null,
42,
21.21,
-24,
-12.12,
false,
array('key' => 'value'),
(object) 'value'
];
foreach ($data as $item){
$this->assertSame(false, $obj->validateInput($item));
}
}
Run Code Online (Sandbox Code Playgroud)
当测试失败时,我只得到行号 - 这对于所有值都是相同的,因为它在一个循环中.
Run Code Online (Sandbox Code Playgroud)1) MyClassTest::testValidateInput Failed asserting that true is identical to false. /home/jeff/MyClass/tests/MyClassTest.php:24
如何确定断言失败的值?
使用数据提供者.然后,PHPUnit将告诉您提供程序的哪个索引失败.
/**
* @dataProvider getInputData
*/
public function testValidateInput($value)
{
$obj = new MyClass();
$this->assertSame(false, $obj->validateInput($value));
}
public function getInputData()
{
return [
[null],
[42],
[21.21],
[-24],
[-12.12],
[true],
[false],
[array('key' => 'value')],
[(object) 'value'],
];
}
Run Code Online (Sandbox Code Playgroud)
1) Test::testValidateInput with data set #3 (21.21)
Failed asserting that true matches expected false.
Run Code Online (Sandbox Code Playgroud)
还有一个提示:当声明为boolean时,使用assertFalse方法