timg/fuzzymock

dev-master 2018-06-22 11:05 UTC

This package is not auto-updated.

Last update: 2024-11-10 06:59:14 UTC


README

composer require timg/fuzzymock

Fuzzymock is a small library that helps to create tests for edge-cases.

Sometimes you want to check if 2 different implementations that are using such a class are working the same way. Something like:

static::assertEquals((new GreeterA)->greet($person), (new GreeterB)->greet($person));

consider you've such a Person class:

class Person {

    public $age;
  
    public function getAge() {
        return $this->age;
    }

}

you can create a FuzzyMock for the Person:

$fuzzyPersonMock = new \Tg\Fuzzymock\FuzzyBuilder(Person::class);
$fuzzyPersonMock->fn('getAge')
    ->couldReturn(new FuzzyFloat(1, 2, 2))
    ->couldReturn(new FuzzyCastString(new FuzzyInt()))
;

/** @var Person $person */
$personBuilder = $fuzzyPersonMock->createBuilder();

while (true) {
    $person = $personBuilder->createNew();
    echo $person->getAge() . "\n"; // a float, or a string containing a random int
}

the createBuilder method creates a PHP-Class on the fly (no reflection etc.). currently there are no benchmarks but FuzzyMock should be extrem fast.