jenkins-bot has submitted this change and it was merged.
Change subject: Allow debugging of unit tests via wfDebugLog.
......................................................................
Allow debugging of unit tests via wfDebugLog.
This adds a listener to the PHPUnit test runner that will report
testing progress via wfDebugLog. This is useful for debugging
situations in which phpunit itself fails to report errors and
does not terminate normally. Having a debug log should at least
help with locating the trigger of the problem.
Change-Id: I433537a7f26197d8cff6f133e26ae5709871500f
---
M tests/TestsAutoLoader.php
M tests/phpunit/MediaWikiPHPUnitCommand.php
A tests/phpunit/MediaWikiPHPUnitTestListener.php
3 files changed, 135 insertions(+), 0 deletions(-)
Approvals:
Hoo man: Looks good to me, approved
jenkins-bot: Verified
diff --git a/tests/TestsAutoLoader.php b/tests/TestsAutoLoader.php
index d7237f7..0939ebe 100644
--- a/tests/TestsAutoLoader.php
+++ b/tests/TestsAutoLoader.php
@@ -38,6 +38,7 @@
# tests/phpunit
'MediaWikiTestCase' => "$testDir/phpunit/MediaWikiTestCase.php",
'MediaWikiPHPUnitCommand' =>
"$testDir/phpunit/MediaWikiPHPUnitCommand.php",
+ 'MediaWikiPHPUnitTestListener' =>
"$testDir/phpunit/MediaWikiPHPUnitTestListener.php",
'MediaWikiLangTestCase' => "$testDir/phpunit/MediaWikiLangTestCase.php",
'MediaWikiProvide' => "$testDir/phpunit/includes/Providers.php",
'TestUser' => "$testDir/phpunit/includes/TestUser.php",
diff --git a/tests/phpunit/MediaWikiPHPUnitCommand.php
b/tests/phpunit/MediaWikiPHPUnitCommand.php
index f5760ea..387107b 100644
--- a/tests/phpunit/MediaWikiPHPUnitCommand.php
+++ b/tests/phpunit/MediaWikiPHPUnitCommand.php
@@ -12,11 +12,28 @@
'use-normal-tables' => false,
'reuse-db' => false,
'wiki=' => false,
+ 'debug-tests' => false,
);
public function __construct() {
foreach ( self::$additionalOptions as $option => $default ) {
$this->longOptions[$option] = $option . 'Handler';
+ }
+ }
+
+ protected function handleArguments(array $argv) {
+ parent::handleArguments( $argv );
+
+ if ( !isset( $this->arguments['listeners'] ) ) {
+ $this->arguments['listeners'] = array();
+ }
+
+ foreach ($this->options[0] as $option) {
+ switch ($option[0]) {
+ case '--debug-tests':
+ $this->arguments['listeners'][] = new
MediaWikiPHPUnitTestListener( 'PHPUnitCommand' );
+ break;
+ }
}
}
@@ -94,6 +111,9 @@
--reuse-db Init DB only if tables are missing and keep after
finish.
+Debugging options:
+ --debug-tests Log testing activity to the PHPUnitCommand log
channel.
+
EOT;
}
}
diff --git a/tests/phpunit/MediaWikiPHPUnitTestListener.php
b/tests/phpunit/MediaWikiPHPUnitTestListener.php
new file mode 100644
index 0000000..18e3fb7
--- /dev/null
+++ b/tests/phpunit/MediaWikiPHPUnitTestListener.php
@@ -0,0 +1,114 @@
+<?php
+class MediaWikiPHPUnitTestListener implements PHPUnit_Framework_TestListener {
+
+ /**
+ * @var string
+ */
+ protected $logChannel;
+
+ public function __construct( $logChannel ) {
+ $this->logChannel = $logChannel;
+ }
+
+ protected function getTestName( PHPUnit_Framework_Test $test ) {
+ $name = get_class( $test );
+
+ if ( $test instanceof PHPUnit_Framework_TestCase ) {
+ $name .= '::' . $test->getName( true );
+ }
+
+ return $name;
+ }
+
+ protected function getErrorName( Exception $exception ) {
+ $name = get_class( $exception );
+ $name = "[$name] " . $exception->getMessage();
+
+ return $name;
+ }
+
+ /**
+ * An error occurred.
+ *
+ * @param PHPUnit_Framework_Test $test
+ * @param Exception $e
+ * @param float $time
+ */
+ public function addError( PHPUnit_Framework_Test $test, Exception $e,
$time ) {
+ wfDebugLog( $this->logChannel, 'ERROR in ' .
$this->getTestName( $test ) . ': ' . $this->getErrorName( $e ) );
+ }
+
+ /**
+ * A failure occurred.
+ *
+ * @param PHPUnit_Framework_Test $test
+ * @param PHPUnit_Framework_AssertionFailedError $e
+ * @param float $time
+ */
+ public function addFailure( PHPUnit_Framework_Test $test,
PHPUnit_Framework_AssertionFailedError $e, $time ) {
+ wfDebugLog( $this->logChannel, 'FAILURE in ' .
$this->getTestName( $test ) . ': ' . $this->getErrorName( $e ) );
+ }
+
+ /**
+ * Incomplete test.
+ *
+ * @param PHPUnit_Framework_Test $test
+ * @param Exception $e
+ * @param float $time
+ */
+ public function addIncompleteTest( PHPUnit_Framework_Test $test,
Exception $e, $time ) {
+ wfDebugLog( $this->logChannel, 'Incomplete test ' .
$this->getTestName( $test ) . ': ' . $this->getErrorName( $e ) );
+ }
+
+ /**
+ * Skipped test.
+ *
+ * @param PHPUnit_Framework_Test $test
+ * @param Exception $e
+ * @param float $time
+ *
+ * @since Method available since Release 3.0.0
+ */
+ public function addSkippedTest( PHPUnit_Framework_Test $test, Exception
$e, $time ) {
+ wfDebugLog( $this->logChannel, 'Skipped test ' .
$this->getTestName( $test ) . ': ' . $this->getErrorName( $e ) );
+ }
+
+ /**
+ * A test suite started.
+ *
+ * @param PHPUnit_Framework_TestSuite $suite
+ * @since Method available since Release 2.2.0
+ */
+ public function startTestSuite( PHPUnit_Framework_TestSuite $suite ) {
+ wfDebugLog( $this->logChannel, 'START suite ' .
$suite->getName() );
+ }
+
+ /**
+ * A test suite ended.
+ *
+ * @param PHPUnit_Framework_TestSuite $suite
+ * @since Method available since Release 2.2.0
+ */
+ public function endTestSuite( PHPUnit_Framework_TestSuite $suite ) {
+ wfDebugLog( $this->logChannel, 'END suite ' . $suite->getName()
);
+ }
+
+ /**
+ * A test started.
+ *
+ * @param PHPUnit_Framework_Test $test
+ */
+ public function startTest( PHPUnit_Framework_Test $test ) {
+ wfDebugLog( $this->logChannel, 'Start test ' .
$this->getTestName( $test ) );
+ }
+
+ /**
+ * A test ended.
+ *
+ * @param PHPUnit_Framework_Test $test
+ * @param float $time
+ */
+ public function endTest( PHPUnit_Framework_Test $test, $time ) {
+ wfDebugLog( $this->logChannel, 'End test ' .
$this->getTestName( $test ) );
+ }
+}
\ No newline at end of file
--
To view, visit https://gerrit.wikimedia.org/r/74224
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I433537a7f26197d8cff6f133e26ae5709871500f
Gerrit-PatchSet: 4
Gerrit-Project: mediawiki/core
Gerrit-Branch: master
Gerrit-Owner: Daniel Kinzler <[email protected]>
Gerrit-Reviewer: Demon <[email protected]>
Gerrit-Reviewer: Hashar <[email protected]>
Gerrit-Reviewer: Hoo man <[email protected]>
Gerrit-Reviewer: Platonides <[email protected]>
Gerrit-Reviewer: Reedy <[email protected]>
Gerrit-Reviewer: Yurik <[email protected]>
Gerrit-Reviewer: jenkins-bot
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits