如何确定循环中哪个断言失败?

Jef*_*ett 2 php phpunit

我有一个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)

当测试失败时,我只得到行号 - 这对于所有值都是相同的,因为它在一个循环中.

1) MyClassTest::testValidateInput
Failed asserting that true is identical to false.

/home/jeff/MyClass/tests/MyClassTest.php:24
Run Code Online (Sandbox Code Playgroud)

如何确定断言失败的值?

Fin*_*nwe 6

使用数据提供者.然后,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方法