Попытка настроить приборы для моих тестов Phalcon, но не получается.Вы можете понять, что пошло не так с моей реализацией?
Использование
- phalcon 7.2
- Версия Docker 18.09.0-ce-beta1
- docker-compose version 1.22.0
- phpunit6.5.8
- dbunit 3.0.3
Текущее состояние
Подключениев базу данных с помощью функции "getConnection" успешно
create dataSet (тип YAML)
create getDataSet, но не удается установитьУстройство и очистка
unitTestCase.php
<?php
use Phalcon\Di;
use Phalcon\Mvc\Model\Manager as ModelsManager;
use Phalcon\Test\UnitTestCase as PhalconTestCase;
use PHPUnit\DbUnit\TestCaseTrait;
require_once "CustomHelper.php";
// config of phpunit
abstract class UnitTestCase extends PhalconTestCase
{
use TestCaseTrait;
/**
* @var bool
*/
private $_loaded = false;
public function setUp()
{
parent::setUp();
$di = Di::getDefault();
$di->set(
"modelsManager",
function () {
return new ModelsManager();
}
);
$di["modelsMetadata"] = function () {
$metadata = new \Phalcon\Mvc\Model\Metadata\Files(
[
"metaDataDir" => joinPaths(__DIR__, "/path/to/metadata/"),
]
);
return $metadata;
};
$di->setShared('mockControllerHelper', new mockControllerHelper());
$di->setShared('helper', new Helpers());
$di->setShared('config', function () {
return require CONFIG_DIR . 'app.php';
});
$di->setShared('db', function () {
$config = $this->getConfig();
// database configuration from app.php
$class = 'Phalcon\Db\Adapter\Pdo\\' . $config->database->adapter;
$params = [
'host' => $config->database->host,
'username' => $config->database->username,
'password' => $config->database->password,
'dbname' => $config->database->dbname,
];
if ($config->database->adapter == 'Postgresql') {
unset($params['charset']);
}
$connection = new $class($params);
return $connection;
});
$this->setDi($di);
$this->_loaded = true;
}
public function tearDown()
{
/* This static call cleans up the Mockery container used by the current test, and run any verification tasks needed for our expectations. */
\Mockery::close();
}
/**
* Check if the test case is setup properly
*
* @throws \PHPUnit_Framework_IncompleteTestError;
*/
public function __destruct()
{
if (!$this->_loaded) {
throw new \PHPUnit_Framework_IncompleteTestError(
"Please run parent::setUp()."
);
}
}
// Setting part of dbunit
static private $pdo = null;
private $conn = null;
final public function getConnection()
{
require CONFIG_DIR . 'app.php';
if ($this->conn === null) {
if (self::$pdo == null) {
self::$pdo = new PDO(
'mysql:host='. $globalConfig->database->host .';dbname=test',
$globalConfig->database->username,
$globalConfig->database->password
);
}
$this->conn = $this->createDefaultDBConnection(self::$pdo, 'dbname=test');
}
return $this->conn;
}
}
TestControllerTest.php
<?php
namespace Test\Controllers;
use PHPUnit\DbUnit\DataSet\YamlDataSet;
class DatabaseTest extends \UnitTestCase
{
protected function getDataSet()
{
return new YamlDataSet(__DIR__ . "/../DataSet/dataSet.yml");
}
public function testsTableRow() {
$this->assertEquals(1, $this->getConnection()->getRowCount('testRow'), "");
}
}
DataSet
testRow:
-
id: 1
name: 'test'
text: 'hello, world'
Ответ
Failed asserting that 0 matches expected 1.
Примечание
Когда я использую настоящее соединение с базой данных mysql в getConnection и вызываю $this->getConnection()->getRowCount('testRow')
, результат верный.Таким образом, проблема возникает из-за загрузки набора данных yaml
добавок 1
Содержимое $this->getConnection
:
(выполнить print_r($this->getConnection(), false);
)
(
[connection:protected] => PDO Object
(
)
[metaData:protected] => PHPUnit\DbUnit\Database\Metadata\MySQL Object
(
[schemaObjectQuoteChar:protected] => `
[pdo:protected] => PDO Object
(
)
[schema:protected] => dbname=test
[truncateCommand:protected] => TRUNCATE
)
)
Содержимое $this->getDataSet()
:
(выполнить print_r($this->getDataSet(), false);
)
(
[tables:protected] => Array
(
[testRow] => PHPUnit\DbUnit\DataSet\DefaultTable Object
(
[tableMetaData:protected] => PHPUnit\DbUnit\DataSet\DefaultTableMetadata Object
(
[columns:protected] => Array
(
[0] => id
[1] => name
[2] => text
)
[primaryKeys:protected] => Array
(
)
[tableName:protected] => testRow
)
[data:protected] => Array
(
[0] => Array
(
[id] => 1
[name] => test
[text] => hello, world
)
)
[other:PHPUnit\DbUnit\DataSet\AbstractTable:private] =>
)
)
[parser:protected] => PHPUnit\DbUnit\DataSet\SymfonyYamlParser Object
(
)
)