timg/fuzzymock

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

This package is not auto-updated.

Last update: 2024-09-15 06:05:12 UTC


README

composer require timg/fuzzymock

Fuzzymock 是一个小型库,帮助创建边缘情况的测试。

有时你可能想要检查两个使用此类不同实现的实现是否以相同的方式工作。例如:

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

假设你有一个 Person

class Person {

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

}

你可以为 Person 创建一个 FuzzyMock

$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
}

createBuilder 方法会动态创建一个 PHP 类(没有反射等)。目前还没有基准测试,但 FuzzyMock 应该非常快。