From 7fef889f685e95234dfa9da693832c98a6390fae Mon Sep 17 00:00:00 2001 From: Jaime Perez Crespo <jaime.perez@uninett.no> Date: Fri, 10 Jun 2016 15:29:31 +0200 Subject: [PATCH] Be a bit more verbose with the testing instructions. --- TESTING.md | 67 ++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 48 insertions(+), 19 deletions(-) diff --git a/TESTING.md b/TESTING.md index 2916ae91a..90e6c9d17 100644 --- a/TESTING.md +++ b/TESTING.md @@ -1,35 +1,64 @@ Testing ======= -All tests should be in "tests/". The directory structure there replicates the -main structure of the code. Each class Whatever is tested by a class named -WhateverTest.php, following the same path as the original. +Testing your code is crucial to have a stable and good quality product. +We are therefore slowly increasing the amount of tests we perform, and +as a rule of thumb **all new code should have associated tests**. If you +want to contribute to the project with a pull request, make sure to +**include tests covering your code**. We won't accept pull requests +without tests or getting the code coverage down, except in very specific +situations. -The test classes (WhateverTest) need to extend PHPUnit_Framework_TestCase, and -inside you can implement how many methods you want. phpunit will only run the -ones prefixed with "test". +All the tests reside in the `tests` directory. The directory structure +there replicates the main structure of the code. Each class is tested by +a class named with the same name and `Test` appended, having the same +directory structure as the original, but inside the `tests` directory. +We also use namespaces, with `SimpleSAML\Test` as the root for standard +classes, and `SimpleSAML\Test\Module\modulename` for classes located in +modules. -You'd usually use the $this->assertSomething() methods provided by -PHPUnit_Framework_TestCase, but you can also tell phpunit to expect an -exception to be thrown using phpdoc: +For example, if you want to test the `SimpleSAML\Utils\HTTP` class +located in `lib/SimpleSAML/Utils/HTTP.php`, the tests must be in a class +named `HTTPTest` implemented in +`tests/lib/SimpleSAML/Utils/HTTPTest.php`, with the following namespace +definition: +```php +namespace SimpleSAML\Test\Utils; ``` -/** + +The test classes need to extend `PHPUnit_Framework_TestCase`, and inside +you can implement as many methods as you want. `phpunit` will only run +the ones prefixed with "test". + +You will usually make use of the `assert*()` methods provided by +`PHPUnit_Framework_TestCase`, but you can also tell `phpunit` to expect +an exception to be thrown using *phpdoc*. For example, if you want to +ensure that the `SimpleSAML\Utils\HTTP::addURLParameters()` method +throws an exception in a specific situation: + +```php + /** * Test SimpleSAML\Utils\HTTP::addURLParameters(). * * @expectedException \InvalidArgumentException -*/ + */ + public function testAddURLParametersInvalidParameters() { ``` -Run the tests locally by hiding the config-directory in the root (as the tests cannot use that) and running: +Refer to [the `phpunit` documentation](https://phpunit.de/documentation.html) +for more information on how to write tests. -``` +Once you have implemented your tests, you can run them locally. First, +make sure the `config` directory is **not** in the root of your +SimpleSAMLphp installation, as the tests cannot use that. Make sure +you have `phpunit` installed and run: + +```sh phpunit -c tools/phpunit/phpunit.xml ``` -After you've pushed a change, Travis-CI will run your test in the CI platform. - -Todo ----- - -The tests should use namespaces. +All the tests are run by our *continuous integration* platform, +[travis](https://travis-ci.org/simplesamlphp/simplesamlphp). If you are +submitting a pull request, Travis will run your tests and notify whether +your code builds or not according to them. -- GitLab