У меня возникли некоторые проблемы при попытке использовать PHPUnit_Extensions_Database_TestCase в IBM Db2.
Я пробовал разные решения:
1. with a DBAL connection in the getConnection() method:
final public function getConnection() {
$options = array(
'i5_naming' => DB2_I5_NAMING_ON,
'DB2_ATTR_CASE' => DB2_CASE_LOWER
);
$driver = 'ibm_db2';
$ConnParm = array(
'driver' => $driver,
'dbname' => $hostDB,
'host' => $tcphost,
'user' => $un,
'password' => $pw,
'driverOptions' => $options
);
$this->connDB = DriverManager::getConnection($ConnParm);
$this->conn = $this->createDefaultDBConnection($this->connDB, $ConnParm['dbname']);
return $this->conn;
}
с этим исключением: аргумент 1 передан
PHPUnit_Extensions_Database_TestCase :: createDefaultDBConnection () должен
быть экземпляром PDO, заданным экземпляром Doctrine \ DBAL \ Connection,
2. with PDO connection
final public function getConnection()
{
if ($this->conn === null) {
if (self::$pdo == null) {
self::$pdo = new PDO( $GLOBALS['DB_DSN'], $GLOBALS['DB_USER'], $GLOBALS['DB_PASSWD'] );
}
$this->conn = $this->createDefaultDBConnection(self::$pdo, $GLOBALS['DB_DBNAME']);
}
return $this->conn;
}
execption: PHPUnit_Extensions_Database_Exception: указанный класс для
Драйвер IBM (PHPUnit_Extensions_Database_DB_MetaData_Ibm) не
существовать.
3 by creating the Ibm.php class inside:
phpunit/dbunit/PHPUnit/Extensions/Database/DB/Meatadata/Ibm.php
adding the line:
'ibm' => 'PHPUnit_Extensions_Database_DB_MetaData_Ibm' inside $metaDataclassMap in Extensions/Database/DB/MetaData.php
adding the line :
'phpunit_extensions_database_db_metadata_ibm' => '/Extensions/Database/DB/MetaData/Ibm.php' inside dbunit/PHPUnit/Extensions/Database/Autoload.php
исключение: PHPUnit_Extensions_Database_Exception: указанный класс для
Драйвер IBM (PHPUnit_Extensions_Database_DB_MetaData_Ibm) не
существовать.
Есть ли кто-нибудь, кто знает, как я могу протестировать базу данных IBM DB2 с помощью PHPUnit и DBUnit (используя getDataSet, assertDataSetsEqual () ..)?
Большое спасибо
Больше деталей:
Я скопировал Oci.php
и создал
Ibm.php
Скрипт из него, в папке:
phpunit/dbunit/PHPUnit/Extensions/Database/DB/Meatadata/
Внутри Ibm.php
скрипт я объявил класс: PHPUnit_Extensions_Database_DB_MetaData_Ibm
с помощью этих методов:
getTableNames()
getTableColumns()
getTablePrimaryKeys()
loadColumnInfo()
В данный момент я не концентрируюсь на содержании методов. Я адаптирую их к DB2 SQL позже.
После этого я добавил элемент:
'ibm' => 'PHPUnit_Extensions_Database_DB_MetaData_Ibm'
внутри $metaDataclassMap
массив в Extensions/Database/DB/MetaData.php
и в автозагрузку:
dbunit/PHPUnit/Extensions/Database/Autoload.php
я добавил элемент:
'phpunit_extensions_database_db_metadata_ibm' => '/Extensions/Database/DB/MetaData/Ibm.php'.
Теперь у меня есть эта ошибка:
1) DeliveredOrdersTest :: testIfGetsDataSet
PHPUnit_Extensions_Database_Exception: указанный класс для драйвера ibm
(PHPUnit_Extensions_Database_DB_MetaData_Ibm) не существует.
во время выполнения этого теста (deliveryOrdersXmlFixture.xml является стандартным набором данных XML)
:
class DeliveredOrdersTest extends PHPUnit_Extensions_Database_TestCase {
// only instantiate pdo once for test clean-up/fixture load
static private $pdo = null;
// only instantiate PHPUnit_Extensions_Database_DB_IDatabaseConnection once per test
private $conn = null;
final public function getConnection()
{
if ($this->conn === null) {
if (self::$pdo == null) {
self::$pdo = new PDO( $GLOBALS['DB_DSN'], $GLOBALS['DB_USER'], $GLOBALS['DB_PASSWD'] );
}
$this->conn = $this->createDefaultDBConnection(self::$pdo, $GLOBALS['DB_DBNAME']);
}
return $this->conn;
}
/**
* @return PHPUnit_Extensions_Database_DataSet_IDataSet
*/
public function getDataSet() {
return $this->createXMLDataSet(dirname(__FILE__) . '/_files/deliveredOrdersXmlFixture.xml');
}
public function testIfGetsDataSet() {
// empty test, in order to have the getDataSet call
}
}
Что мне не хватает?
Где я должен указать мой новый PHPUnit_Extensions_Database_DB_MetaData_Ibm
класс, чтобы позволить PHPUnit найти его?
Я так далёк от получения какой-либо ошибки при выполнении теста?
Заранее спасибо.
Задача ещё не решена.
Других решений пока нет …