在使用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。
答案 0 :(得分:2)
Zend 1.11不支持PHPUnit 3.6,你需要降级做PHPUnit 3.5或3.4。
尝试以特定顺序卸载并重新安装PHPUnit及其依赖项,如http://dustyreagan.com/downgrade-phpunit-3-6-to-3-5-15/
所示答案 1 :(得分:2)
在不卸载最新版本(http://framework.zend.com/issues/browse/ZF-11828中提到)的情况下,将PHPUnit降级到3.4或3.5的替代方法更为简单。
另一种方法是运行多个版本的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()
)));
现在可以通过执行phpunit35
从命令行获得PHPUnit / 3.5。
请注意,ZF / 1.11的官方支持版本是PHPUnit / 3.4;但是,我更喜欢使用3.5,因为它有一些似乎不会破坏兼容性的额外功能。
最后,在运行测试套件时,更新任何构建脚本(例如Jenkins,Makefile或IDE项目)以指向phpunit35
而不是phpunit
。
另请参阅:http://tech.vg.no/2011/11/29/running-multiple-versions-of-phpunit/