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_IMetaDataZend_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,因为它具有一些似乎不会破坏兼容性的额外功能。

最后,更新任何构建脚本(例如 Jenkins、Makefiles 或 IDE 项目)以指向phpunit35而不是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 回答