Automated testing is more than just unit testing

When I speak to people about automated testing or hear others speak about it, it's often confused with unit testing.

Drupal and many other projects use PHPUnit. Its website describes PHPUnit as "a programmer-oriented testing framework for PHP", whereas Wikipedia explicitly says "PHPUnit is a unit testing framework".

But automated testing includes much more.

Other types of tests

In Drupal, whilst there are unit tests, PHPUnit also does feature (aka functional or browser) testing, where it can make an HTTP request to an endpoint and perform assertions on the response's status code and the returned text. This is great for checking if a page exists at a certain path, whether the correct users can access it and whether it contains the expected text. This isn't something that can be done with a unit test.

There are also integration (aka kernel) tests which don't access the browser but have access to Drupal's service container to interact with its services and can save and retrieve values from the database. Again, this isn't available in a unit test which relies heavily on mocking.

What else is there?

In Drupal, I've also used Behat - a behaviour-driven development testing framework that allows writing tests in a plain English syntax called Gherkin instead of PHP.

Pest PHP has an architecture plugin.

There are dedicated front-end testing frameworks like Cypress for UI testing.

Other quality tools like static analysis can also be considered testing tools.

Want to learn more?

If you want to learn more about automated testing in Drupal, I have a talk about that.