3

phpUnit を使用して Zend Framework でいくつかの基本的なデータベース テストを実行した後、次のエラーが発生しました。

PHP Fatal error:  Class Zend_Test_PHPUnit_Db_Metadata_Generic contains 2 abstract methods and must therefore be declared abstract or implement the remaining methods (PHPUnit_Extensions_Database_DB_IMetaData::disablePrimaryKeys, PHPUnit_Extensions_Database_DB_IMetaData::enablePrimaryKeys) in D:\www\~library\zend_latest\library\Zend\Test\PHPUnit\Db\Metadata\Generic.php on line 167

私のテストは、ZF ドキュメントのテストと非常によく似ています。

class BugsTest extends Zend_Test_PHPUnit_DatabaseTestCase
{
private $_connectionMock;

/**
 * Returns the test database connection.
 *
 * @return PHPUnit_Extensions_Database_DB_IDatabaseConnection
 */
protected function getConnection()
{
    if($this->_connectionMock == null) {
        $connection = Zend_Db::factory(...);
        $this->_connectionMock = $this->createZendDbConnection(
            $connection, 'zfunittests'
        );
        Zend_Db_Table_Abstract::setDefaultAdapter($connection);
    }
    return $this->_connectionMock;
}

/**
 * @return PHPUnit_Extensions_Database_DataSet_IDataSet
 */
protected function getDataSet()
{
    return $this->createFlatXmlDataSet(
        dirname(__FILE__) . '/_files/bugsSeed.xml'
    );
}
}

問題に対する私の「修正」は、ライブラリに実装PHPUnit_Extensions_Database_DB_IMetaDataしないことでしたZend_Test_PHPUnit_Db_Metadata_Generic。これですべて正常に動作しますが、この問題を解決する適切な方法があるかどうか疑問に思います。

ZF 11.11、phpUnit 3.6.10、および DbUnit 1.1.2 を使用しています。

4

2 に答える 2

2

最新バージョンをアンインストールせずにPHPUnitを3.4または3.5にダウングレードするより簡単な代替方法があります(http://framework.zend.com/issues/browse/ZF-11828に記載されています)。

別の方法は、PHPUnitの複数のバージョンを実行することです。たとえば、PHPUnit/3.5を/optディレクトリにインストールするには次のようにします。

sudo pear config-set auto_discover 1
sudo pear install --installroot /opt/phpunit35 pear.phpunit.de/PHPUnit-3.5.15
sudo ln -s /opt/phpunit35/usr/bin/phpunit /usr/local/bin/phpunit35

インストール後、手動で編集/opt/phpunit35/usr/bin/phpunitしてインクルードパスを正しく設定します。ファイルの先頭に以下を追加します。

// Ubuntu / Debian
set_include_path(implode(PATH_SEPARATOR, array(
    dirname(__FILE__) . '/../share/php',
    get_include_path()
)));

// CentOS
set_include_path(implode(PATH_SEPARATOR, array(
    dirname(__FILE__) . '/../share/pear',
    get_include_path()
)));

PHPUnit / 3.5は、コマンドラインからを実行することで利用できるようになりましたphpunit35

ZF/1.11で公式にサポートされているバージョンはPHPUnit/3.4であることに注意してください。ただし、互換性を損なうことのないように見えるいくつかの追加機能があるため、3.5を使用することを好みます。

最後に、テストスイートを実行するときではphpunit35なく、ポイントするようにビルドスクリプト(Jenkins、Makefiles、IDEプロジェクトなど)を更新します。phpunit

参照:http ://tech.vg.no/2011/11/29/running-multiple-versions-of-phpunit/

于 2012-07-20T06:23:53.933 に答える
2

Zend 1.11 は PHPUnit 3.6 をサポートしていません。PHPUnit 3.5 または 3.4 をダウングレードする必要があります。

http://dustyreagan.com/downgrade-phpunit-3-6-to-3-5-15/に示すように、PHPUnit とその依存関係を特定の順序でアンインストールして再インストールしてみてください。

また、http://framework.zend.com/issues/browse/ZF-11781も参照してください。

于 2012-05-14T10:54:55.280 に答える