私はこのコードを持っています:
public function checkKeyConstraint($key) {
if ($this->hasKey($key)) {
throw new Exception('Key already exists '.$key);
}
return $this;
}
また、データ プロバイダーを使用した 2 つの PHPUnit テスト メソッドがあります。1 つは存在するキー用で、もう 1 つは存在しないキー用です。問題は、throw new Exceptions('Key already exists '.$key);
行がコード カバレッジ ツールによって未実行として表示されることです。
PHP_CodeCoverage 1.1.3、PHPUnit 3.6.12、PHP 5.4.4、xdebug 2.2.1-5.4-vc9
UPD: テスト方法とデータ プロバイダー
/**
* @covers Dict::checkKeyConstraint
*
* @dataProvider providerNonexistentKeys
*/
public function testCheckKeyConstraintNonExistent($key) {
$this->assertEquals(self::$object, self::$object->checkKeyConstraint($key));
}
/**
* @covers Dict::checkKeyConstraint
*
* @expectedException Exception
* @dataProvider providerValidKeyValues
*/
public function testCheckKeyConstraintExistent($key) {
$this->assertEquals(self::$object, self::$object->checkKeyConstraint($key));
$this->fail();
}
public function providerNonexistentKeys() {
$data = array();
for ($i = 0; $i < 10; $i++) {
$data[] = array('randKey:' . rand());
$data[] = array(rand());
}
return $data;
}
public function providerValidKeyValues() {
$data = array();
for ($i = 0; $i < 20; $i++) {
$stub = new Key('id#' . $i, 'val#' . $i . '#string');
$data[] = array($stub, $stub);
$stub = new Key($i, 'val#' . $i . '#numeric');
$data[] = array($stub, $stub);
}
return $data;
}