Revision 585567 of "Manual:PHP unit testing/Installing PHPUnit" on mediawikiwiki

{{Manual:PHP_unit_testing/navigation}}

You must have PHPUnit 3.6.7 (or later) installed to run the unit tests. Most developers uses the very latest PHPUnit version, so there is no guarantee an older one will actually pass the tests we wrote.

{{notice|
Depending on your distribution and configuration, you may have to run the following commands with <code>sudo</code>.
}}

== Install methods ==
Several methods are available to you.

=== MediaWiki PHPUnit installer ===
We provide a shell script for Unix-like operating systems (Ubuntu, Mac OS X, Linux...). The script will attempt to install PHPUnit using various methods and usually manage to get it installed. It will try [http://pear.php.net PEAR], falling back to the [[w:Advanced Packaging Tool|apt]] and [[w:Yellowdog Updater, Modified|yum]] package managers.

The script is located in <tt>tests/phpunit</tt> and requires root access.

Example installing PHPUnit under an Unix system:

<source lang="bash">
$ cd tests/phpunit
$ sudo ./install-phpunit.sh
</source>

This might be the easiest way to install PHPUnit. 

=== Using a package installer ===
Several Linux distributions provide phpunit as a package, so you can install it using your distribution's package manager or software center GUI.
For example, in Debian and Ubuntu you can enter
<source lang="bash">
$ sudo apt-get --no-install-recommends install phpunit
</source>

=== Using PEAR ===

PEAR is a package manager for PHP, the MediaWiki PHPUnit installer attempt to use it as a first method. You will obviously need to install pear first.
<source lang="bash">
$ sudo pear channel-discover pear.phpunit.de
$ sudo pear channel-discover components.ez.no
$ sudo pear channel-discover pear.symfony-project.com
$ sudo pear update-channels
$ sudo pear install phpunit/PHPUnit
</source>

== Testing your installation ==

<source lang="bash">
$ which phpunit
/some/path/to/bin/phpunit
$ phpunit --version
PHPUnit A.B.C by Sebastian Bergmann.
$
</source>
Where:
; /some/path/to : is the installation prefix which depends upon your distribution and the installation method used. Usually one of <tt>/usr<tt>, <tt>/usr/local/</tt> or <tt>/opt/local/</tt>.
; A.B.C: is the PHPUnit version

If you have something similar to <tt>phpunit --version</tt> output above, you should be fine and can start [[Manual:PHP unit testing/Running the unit tests|running the unit tests]].

----

== Known issues ==

=== Apt package for Ubuntu 11.10 are broken ===
Installation using PEAR will be the preferred way. You may have to update the installation of PEAR itself on your machine:
<source lang="bash">
$ pear upgrade pear
</source>

When running into an error such as [http://pastebin.com/iP1rgc8Z this one], [http://stackoverflow.com/questions/1528717/phpunit-require-once-error this] should help you out. <ref>https://bugzilla.redhat.com/show_bug.cgi?id=758832</ref>

=== Class File_Iterator not found ===
This might happen when trying to run PHPUnit under Ubuntu 11.04.
<source lang="bash">
$ phpunit --version
PHP Fatal error:  Class 'File_Iterator' not found in /usr/share/php/File/Iterator/Factory.php on line 105
</source>


You will have to alter the PHPUnit source code shipped by Ubuntu:
* Edit <tt>/usr/share/pear/File/Iterator/Factory.php</tt>
* on line 44 add <tt>require_once 'File/Iterator.php';</tt>.
(Or install using PEAR).

If that doesn't work, or you're on '''Windows'''-family operating systems, follow the [http://www.phpunit.de/manual/current/en/installation.html '''installation instructions'''] in the PHPUnit manual.

=== <code>DiffHistoryBlobTest::testXdiffAdler32</code> test failing ===
:<tt>DiffHistoryBlobTest::testXdiffAdler32 with data set <nowiki>#0 ('', 'Empty string') String is not zero-terminated ()</nowiki></tt><br/>'''xdiff_string_diff()''' [tests/002.phpt], '''xdiff_string_patch()''' [tests/006.phpt] and '''xdiff_string_merge3()''' [tests/010.phpt] unit tests fail.

This is [[:bugzilla:35110|bug 35110]] and [https://bugs.php.net/bug.php?id=61358 PHP#bug 61358].  This might happen when using version of [http://pecl.php.net/package/xdiff pecl-xdiff PHP extension] older than 1.5.2 with PHP 5.3.10+.  To fix, please upgrade pecl-xdiff extension to [http://pecl.php.net/package-changelog.php?package=xdiff version 1.5.2 or newer]. The '''xdiff''' tool is not affected by this problem.

== Notes ==

<references />