PHPackages                             testo/testo - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Testing &amp; Quality](/categories/testing)
4. /
5. testo/testo

ActiveLibrary[Testing &amp; Quality](/categories/testing)

testo/testo
===========

A lightweight PHP testing framework.

0.10.35(yesterday)1959.3k10[16 issues](https://github.com/php-testo/testo/issues)[2 PRs](https://github.com/php-testo/testo/pulls)20BSD-3-ClausePHPPHP &gt;=8.2CI passing

Since Oct 26Pushed 4d ago3 watchersCompare

[ Source](https://github.com/php-testo/testo)[ Packagist](https://packagist.org/packages/testo/testo)[ Docs](https://php-testo.github.io/)[ Fund](https://boosty.to/roxblnfk)[ RSS](/packages/testo-testo/feed)WikiDiscussions 1.x Synced yesterday

READMEChangelog (10)Dependencies (138)Versions (69)Used By (20)

 [![TESTO](https://github.com/php-testo/.github/raw/1.x/resources/logo-full.svg?raw=true)](#get-started)

The PHP Testing Framework You Control

[![Documentation](https://camo.githubusercontent.com/581efe41679650c23bfc15e13cea47cde8aa70c0d5eb32ae469ed9765028674a/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f446f63756d656e746174696f6e2d626c75653f7374796c653d666f722d7468652d6261646765266c6f676f3d676974626f6f6b266c6f676f436f6c6f723d7768697465)](https://php-testo.github.io)[![Support on Boosty](https://camo.githubusercontent.com/eca37b381ee1cc5abb7bbc819eb3792929666505c31ebc775962992648d00b92/68747470733a2f2f696d672e736869656c64732e696f2f7374617469632f76313f7374796c653d666f722d7468652d6261646765266c6162656c3d266d6573736167653d53706f6e736f7273686970266c6f676f3d426f6f737479266c6f676f436f6c6f723d776869746526636f6c6f723d253233463135463243)](https://boosty.to/roxblnfk)

[![Vibe Index](https://camo.githubusercontent.com/88f429986573dc0e5f37b10c9e97e4466a018b52da5a9ac77968090ed70fd3bd/68747470733a2f2f696d672e736869656c64732e696f2f7374617469632f76313f6c6162656c3d566962652b496e646578266d6573736167653d302e3726636f6c6f723d323362323731267374796c653d666c6174266c6f676f3d64617461253341696d616765253246737667253242786d6c25334262617365363425324350484e325a79423462577875637a30696148523063446f764c336433647935334d793576636d63764d6a41774d43397a646d636949485a705a58644362336739496a41674d4341794e4341794e4349675a6d6c736244306949325a6d5a694925324250484268644767675a44306954546b674e4342524f5341784d7941784f4341784d7942524f5341784d79413549444979494645354944457a494441674d544d6755546b674d544d674f53413049466f694c7a3438634746306143426b50534a4e4d546b674d5342524d546b674e6941794e434132494645784f5341324944453549444578494645784f534132494445304944596755544535494459674d546b674d53426149693825324250484268644767675a4430695454497749444530494645794d4341784f4341794e4341784f4342524d6a41674d5467674d6a41674d6a496755544977494445344944453249444534494645794d4341784f4341794d4341784e4342614969382532425043397a646d63253242)](https://github.com/roxblnfk/action-vibe-index)[![Psalm Level](https://camo.githubusercontent.com/b95f84f4d8ac4c2b92950d0cb6521d4b30a633851fd00248bce0075c7aeaa12b/68747470733a2f2f73686570686572642e6465762f6769746875622f7068702d746573746f2f746573746f2f6c6576656c2e737667)](https://shepherd.dev/github/php-testo/testo)[![Type Coverage](https://camo.githubusercontent.com/481c1d983bc171a4f8a340a19d4f262e4a1f6f9c8379ad777555a37759a992ff/68747470733a2f2f73686570686572642e6465762f6769746875622f7068702d746573746f2f746573746f2f636f7665726167652e737667)](https://shepherd.dev/github/php-testo/testo)[![codecov](https://camo.githubusercontent.com/735008352e3379640593d52de0d7e6df16064200ba9fa5eb095a0997d641f371/68747470733a2f2f636f6465636f762e696f2f67682f7068702d746573746f2f746573746f2f6272616e63682f312e782f67726170682f62616467652e737667)](https://codecov.io/gh/php-testo/testo)[![Mutation testing badge](https://camo.githubusercontent.com/e1e3cb2c544ddcd238a883a65570fa3ef27bda63364c3e17c718d91ef554555d/68747470733a2f2f696d672e736869656c64732e696f2f656e64706f696e743f75726c3d687474707325334125324625324662616467652d6170692e737472796b65722d6d757461746f722e696f2532466769746875622e636f6d2532467068702d746573746f253246746573746f253246312e78)](https://dashboard.stryker-mutator.io/reports/github.com/php-testo/testo/1.x)

Testo is an extensible testing framework built on a lightweight core with a middleware system. It gives you full control over your testing environment while keeping the familiar PHP syntax you already know.

Get Started
-----------

[](#get-started)

### Installation

[](#installation)

```
composer require --dev testo/testo *
```

[![PHP](https://camo.githubusercontent.com/4a8b92b52a9addac4c42158170083463494e7bad5bf88cf8ca68e7f028dd6205/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f7068702d762f746573746f2f746573746f2e7376673f7374796c653d666c61742d737175617265266c6f676f3d706870)](https://packagist.org/packages/testo/testo)[![Latest Version on Packagist](https://camo.githubusercontent.com/291ad091511c45f8236accbe9f642077a46a5737a961996b27eb9a67c90024b4/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f746573746f2f746573746f2e7376673f7374796c653d666c61742d737175617265266c6f676f3d7061636b6167697374)](https://packagist.org/packages/testo/testo)[![License](https://camo.githubusercontent.com/24096bb865a94b3bb4bafd987f0d4d09331f0fc5f184a7ec5cb54234d50f7b8a/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f6c2f746573746f2f746573746f2e7376673f7374796c653d666c61742d737175617265)](LICENSE.md)[![Total Destroys](https://camo.githubusercontent.com/6ff7d3060e329c0462196489d21b49cbdc439c0e44087f272b49ce4f149242fb/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f746573746f2f746573746f2e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/testo/testo/stats)

### Configuration

[](#configuration)

The fastest way to set up Testo in your project is the built-in `init` command:

```
vendor/bin/testo init
```

It will:

- detect your `src/` directory (or prompt for it),
- create `tests/Unit/` if missing,
- generate a minimal `testo.php` next to your `composer.json`,
- register `composer test` and `composer test:` scripts.

For a sub-app layout, point it at the project root: `vendor/bin/testo init --path=app`.

#### Tuning `testo.php` manually

[](#tuning-testophp-manually)

`testo.php` is plain PHP returning an `ApplicationConfig` — edit it freely to add suites, plugins, or coverage. A typical setup looks like:

```
