本文整理汇总了PHP中phpunit_util::get_global_backup方法的典型用法代码示例。如果您正苦于以下问题:PHP phpunit_util::get_global_backup方法的具体用法?PHP phpunit_util::get_global_backup怎么用?PHP phpunit_util::get_global_backup使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类phpunit_util
的用法示例。
在下文中一共展示了phpunit_util::get_global_backup方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: runBare
/**
* Runs the bare test sequence.
* @return void
*/
public final function runBare()
{
global $DB;
if (phpunit_util::$lastdbwrites != $DB->perf_get_writes()) {
// this happens when previous test does not reset, we can not use transactions
$this->testdbtransaction = null;
} else {
if ($DB->get_dbfamily() === 'postgres' or $DB->get_dbfamily() === 'mssql') {
// database must allow rollback of DDL, so no mysql here
$this->testdbtransaction = $DB->start_delegated_transaction();
}
}
try {
parent::runBare();
// set DB reference in case somebody mocked it in test
$DB = phpunit_util::get_global_backup('DB');
} catch (Exception $e) {
// cleanup after failed expectation
phpunit_util::reset_all_data();
throw $e;
}
if (!$this->testdbtransaction or $this->testdbtransaction->is_disposed()) {
$this->testdbtransaction = null;
}
if ($this->resetAfterTest === true) {
if ($this->testdbtransaction) {
$DB->force_transaction_rollback();
phpunit_util::reset_all_database_sequences();
phpunit_util::$lastdbwrites = $DB->perf_get_writes();
// no db reset necessary
}
phpunit_util::reset_all_data();
} else {
if ($this->resetAfterTest === false) {
if ($this->testdbtransaction) {
$this->testdbtransaction->allow_commit();
}
// keep all data untouched for other tests
} else {
// reset but log what changed
if ($this->testdbtransaction) {
try {
$this->testdbtransaction->allow_commit();
} catch (dml_transaction_exception $e) {
phpunit_util::reset_all_data();
throw new coding_exception('Invalid transaction state detected in test ' . $this->getName());
}
}
phpunit_util::reset_all_data(true);
}
}
// make sure test did not forget to close transaction
if ($DB->is_transaction_started()) {
phpunit_util::reset_all_data();
if ($this->getStatus() == PHPUnit_Runner_BaseTestRunner::STATUS_PASSED or $this->getStatus() == PHPUnit_Runner_BaseTestRunner::STATUS_SKIPPED or $this->getStatus() == PHPUnit_Runner_BaseTestRunner::STATUS_INCOMPLETE) {
throw new coding_exception('Test ' . $this->getName() . ' did not close database transaction');
}
}
}
示例2: runBare
/**
* Runs the bare test sequence.
* @return void
*/
public final function runBare()
{
global $DB;
if (phpunit_util::$lastdbwrites != $DB->perf_get_writes()) {
// this happens when previous test does not reset, we can not use transactions
$this->testdbtransaction = null;
} else {
if ($DB->get_dbfamily() === 'postgres' or $DB->get_dbfamily() === 'mssql') {
// database must allow rollback of DDL, so no mysql here
$this->testdbtransaction = $DB->start_delegated_transaction();
}
}
try {
$this->setCurrentTimeStart();
parent::runBare();
// set DB reference in case somebody mocked it in test
$DB = phpunit_util::get_global_backup('DB');
// Deal with any debugging messages.
$debugerror = phpunit_util::display_debugging_messages();
$this->resetDebugging();
if ($debugerror) {
trigger_error('Unexpected debugging() call detected.', E_USER_NOTICE);
}
} catch (Exception $ex) {
$e = $ex;
} catch (Throwable $ex) {
// Engine errors in PHP7 throw exceptions of type Throwable (this "catch" will be ignored in PHP5).
$e = $ex;
}
if (isset($e)) {
// cleanup after failed expectation
self::resetAllData();
throw $e;
}
if (!$this->testdbtransaction or $this->testdbtransaction->is_disposed()) {
$this->testdbtransaction = null;
}
if ($this->resetAfterTest === true) {
if ($this->testdbtransaction) {
$DB->force_transaction_rollback();
phpunit_util::reset_all_database_sequences();
phpunit_util::$lastdbwrites = $DB->perf_get_writes();
// no db reset necessary
}
self::resetAllData(null);
} else {
if ($this->resetAfterTest === false) {
if ($this->testdbtransaction) {
$this->testdbtransaction->allow_commit();
}
// keep all data untouched for other tests
} else {
// reset but log what changed
if ($this->testdbtransaction) {
try {
$this->testdbtransaction->allow_commit();
} catch (dml_transaction_exception $e) {
self::resetAllData();
throw new coding_exception('Invalid transaction state detected in test ' . $this->getName());
}
}
self::resetAllData(true);
}
}
// make sure test did not forget to close transaction
if ($DB->is_transaction_started()) {
self::resetAllData();
if ($this->getStatus() == PHPUnit_Runner_BaseTestRunner::STATUS_PASSED or $this->getStatus() == PHPUnit_Runner_BaseTestRunner::STATUS_SKIPPED or $this->getStatus() == PHPUnit_Runner_BaseTestRunner::STATUS_INCOMPLETE) {
throw new coding_exception('Test ' . $this->getName() . ' did not close database transaction');
}
}
}
示例3: runBare
/**
* Runs the bare test sequence.
* @return void
*/
public function runBare()
{
global $CFG, $USER, $DB;
$dbwrites = $DB->perf_get_writes();
parent::runBare();
$oldcfg = phpunit_util::get_global_backup('CFG');
foreach ($CFG as $k => $v) {
if (!property_exists($oldcfg, $k)) {
unset($CFG->{$k});
error_log('warning: unexpected new $CFG->' . $k . ' value in testcase: ' . get_class($this) . '->' . $this->getName(true));
} else {
if ($oldcfg->{$k} !== $CFG->{$k}) {
$CFG->{$k} = $oldcfg->{$k};
error_log('warning: unexpected change of $CFG->' . $k . ' value in testcase: ' . get_class($this) . '->' . $this->getName(true));
}
}
unset($oldcfg->{$k});
}
if ($oldcfg) {
foreach ($oldcfg as $k => $v) {
$CFG->{$k} = $v;
error_log('warning: unexpected removal of $CFG->' . $k . ' in testcase: ' . get_class($this) . '->' . $this->getName(true));
}
}
if ($USER->id != 0) {
error_log('warning: unexpected change of $USER in testcase: ' . get_class($this) . '->' . $this->getName(true));
$USER = new stdClass();
$USER->id = 0;
}
if ($dbwrites != $DB->perf_get_writes()) {
//TODO: find out what was changed exactly
error_log('warning: unexpected database modification, resetting DB state in testcase: ' . get_class($this) . '->' . $this->getName(true));
phpunit_util::reset_all_data();
}
//TODO: somehow find out if there are changes in dataroot
}