Following discussion in Ibb8175981092d7f41864e641cc3c118af70a5c76, this patch proposes to further reduce the scope of what unit tests may access, by removing the loading of DefaultSettings and GlobalFunctions.php. This also has the implied effect of disabling the storage backend, as well as the global service locator. MediaWikiTestCase is renamed to MediaWikiIntegrationTestCase so it's scope and purpose is more clear. Whether we still need to keep `@group Database` annotation around is debatable, as it's unclear to me what the performance costs are of implying database access for all tests which extend IntegrationTestCase. As far as I can tell, `@group Database` is primarily used in CI to run faster tests before slower ones, and with the new UnitTestCase the annotation seems redundant. To run all testsuites, use `composer phpunit`. Other composer scripts: - `composer phpunit:unit` to run unit tests - `composer phpunit:integration` to run integration tests - `composer phpunit:coverage` to generate code coverage reports from unit tests (requires XDebug). Note that you can pass arguments to composer scripts with `--`, e.g. `composer phpunit:integration --exclude-group Dump`. Other changes: - Rename bootstrap.php to bootstrap.maintenance.php so it's clear it's part of the legacy PHPUnit-as-maintenance-class setup - Create new bootstrap.php which loads the minimal configuration necessary for the tests, and do additional setup in the run() method of the unit/integration test case classes - Move the unit-tests.xml file to phpunit.xml.dist in preparation for this being the default test configuration For a follow-up patch: - Find unit/integration tests for extensions/skins - Migrate other test suites from suite.xml - Support running all tests via vendor/bin/phpunit Bug: T84948 Bug: T89432 Bug: T87781 Change-Id: Ie717b0ecf4fcfd089d46248f14853c80b7ef4a76
34 lines
1.3 KiB
PHP
34 lines
1.3 KiB
PHP
<?php
|
|
/**
|
|
* Bootstrapping for MediaWiki PHPUnit tests when called via the maintenance class tests runner.
|
|
* This file is included by phpunit and is NOT in the global scope.
|
|
*
|
|
* @file
|
|
*/
|
|
|
|
if ( !defined( 'MW_PHPUNIT_TEST' ) ) {
|
|
echo <<<EOF
|
|
You are running these tests directly from phpunit. You may not have all globals correctly set.
|
|
Running phpunit.php instead is recommended.
|
|
EOF;
|
|
require_once __DIR__ . "/phpunit.php";
|
|
}
|
|
|
|
// 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();
|
|
} );
|