Doubles: Create mock objects by doubling a given class

Recommend this page to a friend!
  Info   Documentation   View files (40)   Download .zip   Reputation   Support forum   Blog    
Ratings Unique User Downloads Download Rankings
Not yet rated by the usersTotal: 52 All time: 9,821 This week: 347
Version License PHP version Categories
doubles 1.0MIT/X Consortium ...5PHP 5, Language, Testing
Description Author

This package can be used to create mock objects by doubling a given class.

It can take a given class reference as parameter and creates a dummy object of that class that can be used to test as a mock object. The mock object provides useful features like:

- Counting how many times an object method is called
- Check if the mock object is called with given values
- Make a given class function of the mock object return a specific value

Innovation Award
PHP Programming Innovation award nominee
July 2019
Number 5
One way to test applications based on classes that implement important behaviors is to create mock objects.

These are objects that behave like objects of the classes that you want to test but you can change them to make them behave according to the aspects that you want to test about the class features.

This package can be used to create mock objects by creating similar classes that have additional features that are useful for testing purposes like counting how many times among other features.

Manuel Lemos
Picture of Alexandre
  Performance   Level  
Name: Alexandre <contact>
Classes: 3 packages by
Country: France France
Age: ???
All time rank: 388798 in France France
Week rank: 259 13 in France France
Innovation award
Innovation award
Nominee: 2x

Details

SitPHP/Doubles

Build Status

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

Installation

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

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

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

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

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

Configuration

You define the configuration for a specific double using the 2nd argument of the dummy and mock methods :</p>

// 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

About

License

This library is licensed under the MIT license.

Author

Alexandre Geiswiller - alexandre.geiswiller@gmail.com.

  Files  
File Role Description
doc (6 files)
src (6 files, 3 directories)
tests (5 files)
.travis.yml Data Auxiliary data
composer.json Data Auxiliary data
LICENSE Lic. License text
phpunit.xml.dist Data Auxiliary data
readme.md Doc. Documentation

  Files  /  doc  
File Role Description
   0_intro.md Data Auxiliary data
   1_quick_start.md Data Auxiliary data
   2_creating_doubles.md Data Auxiliary data
   3_testing_doubles.md Data Auxiliary data
   4_configuration.md Data Auxiliary data
   5_about.md Data Auxiliary data

  Files  /  src  
File Role Description
Exceptions (5 files)
Lib (6 files)
Stubs (7 files)
   Constraints.php Class Class source
   Double.php Class Class source
   Stubs.php Class Class source
   TestCase.php Class Class source
   TestCasePHPUnit7AndLower.php Class Class source
   TestCasePHPUnit8AndHigher.php Class Class source

  Files  /  src  /  Exceptions  
File Role Description
   BadMethodCallException.php Class Class source
   DoublesException.php Class Class source
   InvalidArgumentException.php Class Class source
   LogicException.php Class Class source
   RuntimeException.php Class Class source

  Files  /  src  /  Lib  
File Role Description
   ClassManager.php Class Class source
   DoubleInterface.php Class Class source
   DoubleStub.stub Class Class source
   EvalLoader.php Class Class source
   Expectation.php Class Class source
   ExpectationCollection.php Class Class source

  Files  /  src  /  Stubs  
File Role Description
   ReturnArgumentStub.php Class Class source
   ReturnCallbackStub.php Class Class source
   ReturnSelfStub.php Class Class source
   ReturnValueMapStub.php Class Class source
   ReturnValueStub.php Class Class source
   StubInterface.php Class Class source
   ThrowExceptionStub.php Class Class source

  Files  /  tests  
File Role Description
   AssertionTest.php Class Class source
   bootstrap.php Example Example script
   ConstraintTest.php Class Class source
   DoubleTest.php Class Class source
   StubTest.php Class Class source

 Version Control Unique User Downloads Download Rankings  
 100%
Total:52
This week:0
All time:9,821
This week:347

For more information send a message to info at phpclasses dot org.