2017 © Pedro Peláez
 

library mocka

image

tomaszdurka/mocka

  • Wednesday, March 21, 2018
  • by tomaszdurka
  • Repository
  • 2 Watchers
  • 6 Stars
  • 26,978 Installations
  • PHP
  • 5 Dependents
  • 0 Suggesters
  • 5 Forks
  • 3 Open issues
  • 65 Versions
  • 1 % Grown

The README.md

Mocka

Travis Build Coverage Status, (*1)

About

Mocka is clean, structured, but still very flexible mocking framework. It follows object-oriented guidelines to create mock classes, objects and their methods. Mocks can be modified during runtime before and once created or used. It has no assertion, expectations framework built-in - still fits well into any testing framework., (*2)

Installation

Mocka is registered as composer package on packagist., (*3)

"tomaszdurka/mocka": "dev-master"

Library usage

Mocking classes, (*4)

$parentClassName = 'Exception';
$class = new ClassMock('MockedException', $parentClassName);
$exception1 = $class->newInstance(['exception message as constructor argument']);
$exception2 = $class->newInstanceWithoutConstructor();

Creating object of mocked classes, (*5)

$class = new ClassMock('MockedException', 'Exception');
$object = $class->newInstance('message');
$object->getMessage();

Mocking methods, (*6)

$class = new ClassMock('MockedException', 'Exception');
$class->mockMethod('getMessage');

// It's also possible to mock method only for generated object
$object = $class->newInstance('message');
$object->mockMethod('getMessage');

// It's possible to mock non-existent methods - they will work once mocked
$class->mockMethod('foo');

// It's also possible to mock static methods
$class->mockStaticMethod('bar');

Modifying method behaviour, (*7)

// Each method returned by any above mock methods return MethodMock object which can be manipulated
$class = new ClassMock('MockedException', 'Exception');
$mockedMethod = $class->mockMethod('getMessage');

// Set closure which will be executed when mocked method is called
$class->mockMethod('getMessage')->set(function () {
    return 'modified message';
});

// Set numbered callbacks
$class->mockMethod('getMessage')
    ->set(function () {
        return 'default message';
    })
    ->at(0, function () {
        return 'first message';
    })
    ->at(2, function () {
        return 'third message';
    });

// There is also shortcut to make method return certain value
$class->mockMethod('getMessages')->set('default')->at(0, 'first message');

// To check how many times method has been called simply use mocked method object
$mockedMethod = $class->mockMethod('getMessage');
// call method...
echo $mockedMethod->getCallCount();

Mocking interfaces, (*8)

$countableClass = new ClassMock('Collection', null, ['Countable']);

Referring back to original method, (*9)

// It's a way to add extra behaviour to original method functionality
$class = new ClassMock('MockedException', 'Exception');
$object = $class->newInstanceWithoutConstructor();
$object->mockMethod('getMessage')->set(function() use ($object) {
    return 'prefix-' . $object->callOriginalMethod('getMessage', func_get_args());
});

Using with test framework like PHPUnit


class TestCase extends \PHPUnit_Framework_TestCase { use \Mocka\MockaTrait; public function testFoo() { // When using mocka trait there are two shortcut methods added to create mocked objects $countableExceptionClass = $this->mockClass('DateTime', ['Countable']); $dateTimeObject = $this->mockObject('DateTime', ['29-12-1984']); } public function testMockingMethod() { $dateTimeObject = $this->mockObject('DateTime', ['29-12-1984']); $this->assertSame('29', $dateTimeObject->format('d')); $mockedFormatMethod = $dateTimeObject->mockMethod('format')->set('foo'); $this->assertSame(0, $mockedFormatMethod->getCallCount()); $this->assertSame('foo', $dateTimeObject->format('d')); $this->assertSame(1, $mockedFormatMethod->getCallCount()); } public function testMethodAssertions() { $pdo = $this->mockClass('PDO')->newInstanceWithoutConstructor(); $pdo->mockMethod('exec')->set(function ($statement) { $this->assertInstanceOf('PDOStatement', $statement); }); } }

The Versions

21/03 2018

dev-upgrade-functional-php

dev-upgrade-functional-php

  Sources   Download

MIT

The Requires

 

The Development Requires

11/02 2017

dev-allow-mocking-unclonable

dev-allow-mocking-unclonable

  Sources   Download

MIT

The Requires

 

The Development Requires

11/02 2017

dev-introduce-overrides

dev-introduce-overrides

  Sources   Download

MIT

The Requires

 

The Development Requires

18/04 2016
18/04 2016

dev-issue-36

dev-issue-36

  Sources   Download

MIT

The Requires

 

The Development Requires

18/04 2016
18/04 2016

dev-issue-35

dev-issue-35

  Sources   Download

MIT

The Requires

 

The Development Requires

18/04 2016
18/04 2016

dev-issue-34

dev-issue-34

  Sources   Download

MIT

The Requires

 

The Development Requires

12/04 2016
12/04 2016

dev-issue-33

dev-issue-33

  Sources   Download

MIT

The Requires

 

The Development Requires

10/04 2016

dev-issue-29

dev-issue-29

  Sources   Download

MIT

The Requires

 

The Development Requires

14/08 2015
20/07 2015
20/07 2015

dev-issue-31

dev-issue-31

  Sources   Download

MIT

The Requires

 

The Development Requires

07/07 2015
07/07 2015

dev-issue-30

dev-issue-30

  Sources   Download

MIT

The Requires

 

The Development Requires

27/04 2015
27/04 2015

dev-issue-26

dev-issue-26

  Sources   Download

MIT

The Requires

 

The Development Requires

23/04 2015
23/04 2015

dev-issue-24

dev-issue-24

  Sources   Download

MIT

The Requires

 

The Development Requires

13/04 2015
13/04 2015

dev-issue-23

dev-issue-23

  Sources   Download

MIT

The Requires

 

The Development Requires

23/02 2015
23/02 2015

dev-internal-classes-mocking

dev-internal-classes-mocking

  Sources   Download

MIT

The Requires

 

The Development Requires

15/02 2015

dev-issue-8

dev-issue-8

  Sources   Download

MIT

The Requires

 

The Development Requires

30/01 2015
30/01 2015

dev-issue-22

dev-issue-22

  Sources   Download

MIT

The Requires

 

The Development Requires

25/08 2014
25/08 2014

dev-issue-20

dev-issue-20

  Sources   Download

MIT

The Requires

 

The Development Requires

30/07 2014
30/07 2014

dev-issue-19

dev-issue-19

  Sources   Download

MIT

The Requires

 

The Development Requires

18/07 2014
18/07 2014

dev-issue-17

dev-issue-17

  Sources   Download

MIT

The Requires

 

The Development Requires

18/07 2014

dev-issue-18

dev-issue-18

  Sources   Download

MIT

The Requires

 

The Development Requires

17/07 2014
17/07 2014

dev-issue-16

dev-issue-16

  Sources   Download

MIT

The Requires

 

The Development Requires

17/07 2014
17/07 2014

dev-issue-15

dev-issue-15

  Sources   Download

MIT

The Requires

 

The Development Requires

17/07 2014

dev-issue-13

dev-issue-13

  Sources   Download

MIT

The Requires

 

The Development Requires

23/06 2014
23/06 2014

dev-issue-12

dev-issue-12

  Sources   Download

MIT

The Requires

 

The Development Requires

19/06 2014
19/06 2014

dev-issue-11

dev-issue-11

  Sources   Download

MIT

The Requires

 

The Development Requires

18/06 2014

dev-issue-10

dev-issue-10

  Sources   Download

MIT

The Requires

 

The Development Requires

18/06 2014

0.4.1

0.4.1.0

  Sources   Download

MIT

The Requires

 

The Development Requires

18/06 2014

dev-issue-9

dev-issue-9

  Sources   Download

MIT

The Requires

 

The Development Requires

17/06 2014

0.4.0

0.4.0.0

  Sources   Download

MIT

The Requires

 

The Development Requires

17/06 2014

dev-issue-7

dev-issue-7

  Sources   Download

MIT

The Requires

 

The Development Requires

16/06 2014

0.3.0

0.3.0.0

  Sources   Download

MIT

The Requires

 

The Development Requires

16/06 2014

dev-issue-6

dev-issue-6

  Sources   Download

MIT

The Requires

 

The Development Requires

16/06 2014

dev-issue-5

dev-issue-5

  Sources   Download

MIT

The Requires

 

The Development Requires

11/06 2014

0.2.1

0.2.1.0

  Sources   Download

MIT

The Requires

 

The Development Requires

11/06 2014

dev-issue-4

dev-issue-4

  Sources   Download

MIT

The Requires

 

The Development Requires

11/06 2014

0.2.0

0.2.0.0

  Sources   Download

MIT

The Requires

 

The Development Requires

11/06 2014

dev-issue-3

dev-issue-3

  Sources   Download

MIT

The Requires

 

The Development Requires

10/06 2014

dev-issue-2

dev-issue-2

  Sources   Download

MIT

The Requires

 

The Development Requires

10/06 2014

0.1.0

0.1.0.0

  Sources   Download

MIT

The Requires

 

The Development Requires

10/06 2014

dev-issue-1

dev-issue-1

  Sources   Download

MIT

The Requires

 

The Development Requires