0

私はこのコードを持っています:

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;
}
4

1 に答える 1

0

私はアホです。問題は、このtestCheckKeyConstraintExistentメソッドでは、キーではなくオブジェクト全体をチェックすることでした。次のように書き換える必要があります。

public function testCheckKeyConstraintExistent(Key $key) {
    $this->assertEquals(self::$object, self::$object->checkKeyConstraint($key->_id()));
    $this->fail();
}
于 2012-08-13T19:52:24.897 に答える