Manual:PHP unit testing/PostgreSQL
PHPUnit testing
Contents
- Running the tests
- Generate code coverage
- Writing testable PHP code
- Writing tests
- Continuous integration
- Understanding build failures
- Appendix
(how to help, resources..)
Tools
Status
[edit]MediaWiki's PHPUnit test suite as a whole runs ok on a PostgreSQL configuration.
Hints for devs
[edit]Setting up a pgsql environment on Ubuntu Linux:
- apt-get install postgresql php5-pgsql
- Follow notes from eg [1] on setting up a password for 'postgres' special user
- If lazy, throw that 'postgres' username and password straight into MediaWiki's installer
Ideally, you should probably set up an account for the wiki etc, but who knows man!
Possible problems
[edit]It kinda looks like things are modifying the core database that shouldn't... after running the unit tests a couple times through, I saw my wiki has been cluttered with extra users:
Altuseruser (Created on 24 October 2011 at 15:42) Apitestsysop (Created on 24 October 2011 at 15:42) Apitestuser (Created on 24 October 2011 at 15:42) Brionv (administrator, bureaucrat) (Created on 24 October 2011 at 15:39) Uploadstashtestsysop (Created on 24 October 2011 at 15:40) Uploadstashtestuser (Created on 24 October 2011 at 15:40) Useruser (Created on 24 October 2011 at 15:42) UTApiBlockee (Created on 24 October 2011 at 15:42) UTBlockee (Created on 24 October 2011 at 15:42) UTSysop (Created on 24 October 2011 at 15:40)
The unit tests should not alter the live database, and these don't end up visible on a MySQL instance...
Ditto with the #Test failures below, looks like a live count is being updated?
Had to bump up $wgMaxShellMemory and $wgMaxShellFileSize to make some shell-out commands happy.
Test failures
[edit]There was 1 failure:
1) ParserTests::testParserTest with data set #182 ('Magic Word: {{NUMBEROFFILES}}', '{{NUMBEROFFILES}}', '<p>2 </p>', '', '') Magic Word: {{NUMBEROFFILES}} Failed asserting that two strings are equal. --- Expected +++ Actual @@ @@ -<p>2 +<p>366 </p> /var/www/pg/tests/phpunit/includes/parser/NewParserTest.php:540 /var/www/pg/tests/phpunit/MediaWikiTestCase.php:61 /var/www/pg/tests/phpunit/MediaWikiPHPUnitCommand.php:31 /var/www/pg/tests/phpunit/phpunit.php:60
We have a larger number than expected, not really sure why. Possibly something's awry with the test table setup.
Skipped tests
[edit]There were 5 skipped tests:
1) SearchEngineTest::testFullWidth MySQL or SQLite with FTS3 only /var/www/pg/tests/phpunit/includes/search/SearchEngineTest.php:29 /var/www/pg/tests/phpunit/MediaWikiTestCase.php:61 /var/www/pg/tests/phpunit/MediaWikiPHPUnitCommand.php:31 /var/www/pg/tests/phpunit/phpunit.php:60
2) SearchEngineTest::testTextSearch MySQL or SQLite with FTS3 only /var/www/pg/tests/phpunit/includes/search/SearchEngineTest.php:29 /var/www/pg/tests/phpunit/MediaWikiTestCase.php:61 /var/www/pg/tests/phpunit/MediaWikiPHPUnitCommand.php:31 /var/www/pg/tests/phpunit/phpunit.php:60
3) SearchEngineTest::testTextPowerSearch MySQL or SQLite with FTS3 only /var/www/pg/tests/phpunit/includes/search/SearchEngineTest.php:29 /var/www/pg/tests/phpunit/MediaWikiTestCase.php:61 /var/www/pg/tests/phpunit/MediaWikiPHPUnitCommand.php:31 /var/www/pg/tests/phpunit/phpunit.php:60
4) SearchEngineTest::testTitleSearch MySQL or SQLite with FTS3 only /var/www/pg/tests/phpunit/includes/search/SearchEngineTest.php:29 /var/www/pg/tests/phpunit/MediaWikiTestCase.php:61 /var/www/pg/tests/phpunit/MediaWikiPHPUnitCommand.php:31 /var/www/pg/tests/phpunit/phpunit.php:60
5) SearchEngineTest::testTextTitlePowerSearch MySQL or SQLite with FTS3 only /var/www/pg/tests/phpunit/includes/search/SearchEngineTest.php:29 /var/www/pg/tests/phpunit/MediaWikiTestCase.php:61 /var/www/pg/tests/phpunit/MediaWikiPHPUnitCommand.php:31 /var/www/pg/tests/phpunit/phpunit.php:60
Probably these test cases need updating to make sure they run on PG's search engine as well.