// the find
sebastianbergmann/phpunit
The PHP Unit Testing framework.
PHPUnit is the de facto standard unit testing framework for PHP, maintained by Sebastian Bergmann since 2001. If you write PHP professionally, you are already using this or you should be. There is no real alternative.
The event system added in PHPUnit 10 is genuinely well-designed — a typed event bus with subscriber interfaces per event type means extensions can hook into specific lifecycle moments without monkey-patching. The XSD-versioned configuration schema (one per minor version, going back to 8.5) means upgrading never silently breaks your phpunit.xml. Code coverage is a first-class citizen with static analysis support, not an afterthought bolted on. The PHAR distribution with scoped dependencies via PHP-Scoper means you can drop it into a project without worrying about version conflicts with your application's dependencies.
Parallel test execution is still not built in — you need a third-party package like paratest, which means it is an ecosystem bolt-on rather than a framework feature, and it shows when you hit edge cases with shared state. The attribute-based API (introduced in PHPUnit 10) and the annotation-based API coexist in an uncomfortable way; the docs tell you to migrate, but the migration path requires touching every test file in your suite. Mock objects use a code-generation approach that can produce confusing failures when the generated class gets cached between runs in unusual environments. The framework's strict stance on test isolation — risky tests, output checking — is correct in principle but defaults to warnings-as-failures in a way that catches new adopters off guard when they inherit a legacy suite.