PHPackages                             sitphp/doubles - 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. sitphp/doubles

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

sitphp/doubles
==============

A simple yet powerful library to make class doubles for testing

v2.4.5(3y ago)214216MITPHPPHP &gt;=7.2

Since Jul 21Pushed 3y agoCompare

[ Source](https://github.com/sitphp/doubles)[ Packagist](https://packagist.org/packages/sitphp/doubles)[ Docs](https://github.com/sitphp/doubles)[ RSS](/packages/sitphp-doubles/feed)WikiDiscussions master Synced 2mo ago

READMEChangelogDependencies (1)Versions (30)Used By (6)

SitPHP/Doubles
==============

[](#sitphpdoubles)

[![Build Status](https://camo.githubusercontent.com/85428701b04df6de6957d989bfc41fc84751458baa09be02de3056eae7177c01/68747470733a2f2f7472617669732d63692e6f72672f7369747068702f646f75626c65732e7376673f6272616e63683d6d6173746572)](https://camo.githubusercontent.com/85428701b04df6de6957d989bfc41fc84751458baa09be02de3056eae7177c01/68747470733a2f2f7472617669732d63692e6f72672f7369747068702f646f75626c65732e7376673f6272616e63683d6d6173746572)

The "sitphp/doubles" library can help you to test your PHP classes by generating doubles that look like the original classes but can be manipulated and tested (sort of a copy of a class). These doubles then can then be used instead of the original classes for your test. This library can create doubles of any kind of class, interface or trait.

See full documentation : [here](https://sitphp.com/doubles/doc/intro)

Requirements
------------

[](#requirements)

The "sitphp/doubles" library requires at least PhpUnit 6.5 and at least PHP 7.0. It should be installed from composer which will make sure your configuration matches requirements.

> {.note .info} Note : You can get composer here : .

Installation
------------

[](#installation)

Add the line `"sitphp/doubles": "2.4.*"` in the `"require-dev"` section of your composer.json file :

```
{
    "require-dev": {
        "sitphp/doubles": "2.4.*"
    }
}
```

And run the following command :

```
composer update
```

This will install the latest version of the "sitphp/doubles" library with the required PhpUnit package.

Creating a double
-----------------

[](#creating-a-double)

A double is called a "dummy" when all the methods of the original class are overwritten to return `null`. To get a " dummy" double instance, use the `dummy` method :

```
// Get a double instance of type "dummy" for class "MyClass"
$my_double = Double::dummy(MyClass::class)->getInstance();
```

A double is called a "mock" when all the methods of the original class are overwritten to behave the same as in the original class. To get a "mock" double instance, use the `mock` method :

```
// Get a double instance of type "mock" for class "MyClass"
$my_double = Double::mock(MyClass::class)->getInstance();
```

For more details : [Read the doc on creating doubles](doc/03_creating_doubles.md)

Testing a double
----------------

[](#testing-a-double)

To test how many times a double method is called, use the `count` method :

```
// Test that the method "myMethod" is called a least one time
$double::_method('myMethod')->count('>=1');
```

To test the values of the arguments passed to a double method, use the `args` method :

```
// Test that the arguments passed to method "myMethod" are "value1" and "value2"
$double::_method('myMethod')->args(['value1', 'value2']);
```

To change the return value of a method, use the `stub` method. :

```
// Make method "myMethod" return "hello"
$my_double::_method('myMethod')->return('hello');
```

For more details : [Read the doc on testing doubles](doc/04_testing_doubles.md)

Configuration
-------------

[](#configuration)

You define the configuration for a specific double using the 2nd argument of the `dummy` and `mock` methods :

```
// Get double instance with config
$my_double = Double::dummy(MyClass::class, [
    'allow_final_doubles' => true,
    'allow_non_existent_classes' => true
])->getInstance();
```

Here is a list of all available config parameters :

- `allow_final_doubles` : Set this parameter to `false` to stop trying to make doubles of final classes/methods.
- `allow_protected_methods` : Set this parameter to `false` to disallow testing protected methods.
- `allow_non_existent_classes` : Set this parameter to `false` to disallow alias doubles of non existent classes.
- `test_unexpected_methods` : Set this parameter to `true` to automatically receive an assertion error whenever an unexpected method is called.

For more details : [Read the doc on configuration](doc/05_configuration.md)

About
-----

[](#about)

### License

[](#license)

This library is licensed under the [MIT license](https://opensource.org/licenses/MIT).

### Author

[](#author)

Alexandre Geiswiller - .

###  Health Score

32

—

LowBetter than 72% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity14

Limited adoption so far

Community14

Small or concentrated contributor base

Maturity68

Established project with proven stability

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~58 days

Recently: every ~18 days

Total

28

Last Release

1272d ago

Major Versions

v1.0.7 → v2.0.02019-02-24

PHP version history (3 changes)v1.0.0PHP &gt;=7

v2.1.5PHP &gt;=7.0

v2.3.0PHP &gt;=7.2

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/11295288?v=4)[gealex](/maintainers/gealex)[@gealex](https://github.com/gealex)

---

Top Contributors

[![gealex](https://avatars.githubusercontent.com/u/11295288?v=4)](https://github.com/gealex "gealex (74 commits)")

---

Tags

doublesmockphpphpunitphptestingphpunittestunit testingmockdoubles

### Embed Badge

![Health badge](/badges/sitphp-doubles/health.svg)

```
[![Health](https://phpackages.com/badges/sitphp-doubles/health.svg)](https://phpackages.com/packages/sitphp-doubles)
```

###  Alternatives

[php-mock/php-mock-phpunit

Mock built-in PHP functions (e.g. time()) with PHPUnit. This package relies on PHP's namespace fallback policy. No further extension is needed.

1718.2M399](/packages/php-mock-php-mock-phpunit)[blastcloud/guzzler

Supercharge your app or SDK with a testing library specifically for Guzzle.

272419.3k35](/packages/blastcloud-guzzler)[donatj/mock-webserver

Simple mock web server for unit testing

1382.5M80](/packages/donatj-mock-webserver)[elliotchance/concise

Concise is test framework for using plain English and minimal code, built on PHPUnit.

45223.8k4](/packages/elliotchance-concise)[robiningelbrecht/phpunit-pretty-print

Prettify PHPUnit output

76460.0k15](/packages/robiningelbrecht-phpunit-pretty-print)[quizlet/hammock

Hammock is a stand-alone mocking library for Hacklang.

27445.5k](/packages/quizlet-hammock)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
