mirror of
https://github.com/moodle/moodle.git
synced 2025-01-18 22:08:20 +01:00
1a53cbbae4
When we deprecate the use of a file, we often include tests which ensure that the legacy behaviour is maintained. There are also legacy uses in the community where people would like to use the deprecated API for a period. The issue that we face is that, if the deprecated file is included once, then it will be included for all other, unrelated, tests. This means that other tests may not detect cases where the deprecated file was included. We can solve these cases by running the test that performs the inclusion in a deprecated process. This means that the inclusion is only performed in that isolated process, and other unrelated tests do not include the file. However, we also then need to detect which files which are including the file and which we do not know about. This change introduces: - an override to the TestCase::setInIsolation method to define a constant when the test is running in isolation - a new function that a file can call when it is included, to make sure that the test process was isolated, where there is any test.
PHPUnit testing support in Moodle
Documentation
- Moodle PHPUnit integration
- Moodle Writing PHPUnit tests
- PHPUnit online documentation
- Composer dependency manager
Composer installation
Composer is a dependency manager for PHP projects. It installs PHP libraries into /vendor/ subdirectory inside your moodle dirroot.
- install Composer - http://getcomposer.org/doc/00-intro.md
- install PHUnit and dependencies - go to your Moodle dirroot and execute
php composer.phar install
Configure your server
You need to create a new dataroot directory and specify a separate database prefix for the test environment, see config-dist.php for more information.
- add
$CFG->phpunit_prefix = 'phpu_';
to your config.php file - and
$CFG->phpunit_dataroot = '/path/to/phpunitdataroot';
to your config.php file
Initialise the test environment
Before first execution and after every upgrade the PHPUnit test environment needs to be initialised, this command also builds the phpunit.xml configuration files.
- execute
php admin/tool/phpunit/cli/init.php
Execute tests
- execute
vendor/bin/phpunit
from dirroot directory - you can execute a single test case class using class name followed by path to test file
vendor/bin/phpunit lib/tests/phpunit_test.php
- it is also possible to create custom configuration files in xml format and use
vendor/bin/phpunit -c mytestsuites.xml
How to add more tests?
- create
tests/
directory in your add-on - add test file, for example
local/mytest/tests/my_test.php
file withmy_test
class that extendsbasic_testcase
oradvanced_testcase
- set the test class namespace to that of the class being tested
- add some
test_*()
methods - execute your new test case
vendor/bin/phpunit local/mytest/tests/my_test.php
- execute
php admin/tool/phpunit/cli/init.php
to get the plugin tests included in main phpunit.xml configuration file
Windows support
- use
\
instead of/
in paths in examples above