Daniel Kinzler has uploaded a new change for review.
https://gerrit.wikimedia.org/r/74224
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/phpunit/MediaWikiPHPUnitCommand.php
1 file changed, 119 insertions(+), 0 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/core
refs/changes/24/74224/1
diff --git a/tests/phpunit/MediaWikiPHPUnitCommand.php
b/tests/phpunit/MediaWikiPHPUnitCommand.php
index f5760ea..137d9a1 100644
--- a/tests/phpunit/MediaWikiPHPUnitCommand.php
+++ b/tests/phpunit/MediaWikiPHPUnitCommand.php
@@ -18,6 +18,12 @@
foreach ( self::$additionalOptions as $option => $default ) {
$this->longOptions[$option] = $option . 'Handler';
}
+
+ if ( !isset( $this->arguments['listeners'] ) ) {
+ $this->arguments['listeners'] = array();
+ }
+
+ $this->arguments['listeners'][] = new
MediaWikiPHPUnitTestListener();
}
public static function main( $exit = true ) {
@@ -97,3 +103,116 @@
EOT;
}
}
+
+class MediaWikiPHPUnitTestListener implements PHPUnit_Framework_TestListener {
+
+ /**
+ * @var string
+ */
+ protected $logChannel;
+
+ public function __construct( $logChannel = 'PHPUnitCommand' ) {
+ $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: newchange
Gerrit-Change-Id: I433537a7f26197d8cff6f133e26ae5709871500f
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/core
Gerrit-Branch: master
Gerrit-Owner: Daniel Kinzler <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits