PHP 7: Maintaining and Upgrading Legacy Apps · Getting Legacy Code Under Test

PHPUnit for PHP 7 Projects

Choose the right PHPUnit version and configure a test suite for an old codebase.

PHPUnit versions track PHP versions: PHPUnit 9 supports PHP 7.3–8.x and is the usual choice for PHP 7.3/7.4 code; PHPUnit 10+ requires PHP 8.1. PHPUnit 9 uses docblock annotations (@dataProvider, @covers) and non-static data providers are allowed. Add a phpunit.xml.dist, a bootstrap that loads the autoloader (and any legacy globals), and start with a few high-value tests.

<?xml version="1.0" encoding="UTF-8"?>
<phpunit bootstrap="tests/bootstrap.php" colors="true" failOnRisky="true" failOnWarning="true">
  <testsuites>
    <testsuite name="unit"><directory>tests/Unit</directory></testsuite>
    <testsuite name="integration"><directory>tests/Integration</directory></testsuite>
  </testsuites>
  <coverage processUncoveredFiles="false">
    <include><directory suffix=".php">src</directory></include>
  </coverage>
</phpunit>

Common pitfalls

  • Installing PHPUnit 11 on a PHP 7.4 project (it won't install or run).
  • Tests that need the full app bootstrap, making them slow.
  • Ignoring risky tests (tests without assertions).

Key points

  • PHPUnit 9 for PHP 7.3/7.4
  • Separate unit and integration suites
  • Bootstrap only what tests need

Further reading: PHPUnit 9.6 documentation

Practice questions

Which PHPUnit version should a PHP 7.4 project use?

Answer

PHPUnit 9.x — PHPUnit 10 and later require PHP 8.1+. Upgrade PHPUnit after upgrading PHP.

Why split unit and integration test suites?

Answer

Unit tests run fast on every change; integration tests (database, HTTP) are slower and need infrastructure, so they can run separately in CI.

Open in the app to mark lessons complete, take notes and track your progress.