Skip to content

Latest commit

 

History

History
69 lines (56 loc) · 2.63 KB

TESTING.md

File metadata and controls

69 lines (56 loc) · 2.63 KB

Testing

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.

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.

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:

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 the expectException()-method. For example, if you want to ensure that the SimpleSAML\Utils\HTTP::addURLParameters() method throws an exception in a specific situation:

  /**
    * Test SimpleSAML\Utils\HTTP::addURLParameters().
    */
  public function testAddURLParametersInvalidParameters() {
      $this->expectException(ExpectedException::class);

Refer to the phpunit 8.5 documentation 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:

phpunit -c ./phpunit.xml

If your default version of phpunit is more recent than 5.7, you can run the old version installed by composer

./vendor/bin/phpunit -c ./phpunit.xml

All the tests are run by our continuous integration platform using GitHub Actions. If you are submitting a pull request, GitHub Actions will run your tests and notify whether your code builds or not according to them.