From f28d5f772fde609ed6cc09e2aafd641e806e5bdf Mon Sep 17 00:00:00 2001 From: Timo Tijhof Date: Fri, 29 Mar 2019 19:52:00 +0000 Subject: [PATCH] phpunit: Call 'teardownTestDB' from shutdown instead of destruct. This will be called right before the shutdown procedure begins, so that all variables and classes still exist, and the hooks can actually work. See task for details. Bug: T219673 Change-Id: Id6b2b4b7958b78822a0868720f7b0ba46d7b4951 --- tests/phpunit/bootstrap.php | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/tests/phpunit/bootstrap.php b/tests/phpunit/bootstrap.php index a5c8ef61c4..79cb5be338 100644 --- a/tests/phpunit/bootstrap.php +++ b/tests/phpunit/bootstrap.php @@ -14,16 +14,21 @@ EOF; require_once __DIR__ . "/phpunit.php"; } -class MediaWikiPHPUnitBootstrap { - public function __destruct() { - // Return to real wiki db, so profiling data is preserved - MediaWikiTestCase::teardownTestDB(); +// The PHPUnit_TextUI_TestRunner class will run each test suite and may call +// exit() with an exit status code. As such, we cannot run code "after the last test" +// by adding statements to PHPUnitMaintClass::execute or MediaWikiPHPUnitCommand::run. +// Instead, we work around it by registering a shutdown callback from the bootstrap +// file, which runs before PHPUnit starts. +// @todo Once we use PHPUnit 8 or higher, use the 'AfterLastTestHook' feature. +// https://phpunit.readthedocs.io/en/8.0/extending-phpunit.html#available-hook-interfaces +register_shutdown_function( function () { + // This will: + // - clear the temporary job queue. + // - allow extensions to delete any temporary tables they created. + // - restore ability to connect to the real database, + // (for logging profiling data). + MediaWikiTestCase::teardownTestDB(); - // Log profiling data, e.g. in the database or UDP - wfLogProfilingData(); - } - -} - -// This will be destructed after all tests have been run -$mediawikiPHPUnitBootstrap = new MediaWikiPHPUnitBootstrap(); + // Log profiling data, e.g. in the database or UDP + wfLogProfilingData(); +} ); -- 2.20.1