Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
0.00%
0 / 1
0.00%
0 / 7
CRAP
0.00%
0 / 64
Stub
0.00%
0 / 1
0.00%
0 / 7
182
0.00%
0 / 64
 make($class, $params = array()
0.00%
0 / 1
30
0.00%
0 / 22
 anonymous function ($m)
0.00%
0 / 1
2
0.00%
0 / 1
 makeEmptyExcept($class, $method, $params = array()
0.00%
0 / 1
2
0.00%
0 / 3
 makeEmpty($class, $params = array()
0.00%
0 / 1
2
0.00%
0 / 4
 factory($class, $params = array()
0.00%
0 / 1
2
0.00%
0 / 7
 copy($obj, $params = array()
0.00%
0 / 1
2
0.00%
0 / 6
 bindParameters($mock, $params)
0.00%
0 / 1
12
0.00%
0 / 16
<?php
class Stub
{
public static function make($class, $params = array())
{
if (!class_exists($class)) throw new \RuntimeException("Stubbed class $class doesn't exist. Use Stub::factory instead");
$reflection = new \ReflectionClass($class);
$callables = array_filter($params, function ($a) { return is_callable($a); });
if (!empty($callables)) {
if ($reflection->isAbstract()) {
$mock = \PHPUnit_Framework_MockObject_Generator::getMockForAbstractClass($class, array_keys($callables), '', false);
} else {
$mock = \PHPUnit_Framework_MockObject_Generator::getMock($class, array_keys($callables), array(), '', false);
}
} else {
if ($reflection->isAbstract()) {
$mock = \PHPUnit_Framework_MockObject_Generator::getMockForAbstractClass($class, null, '', false);
} else {
$mock = \PHPUnit_Framework_MockObject_Generator::getMock($class, null, array(), '', false);
}
}
self::bindParameters($mock, $params);
$mock->__mocked = $class;
return $mock;
}
public static function makeEmptyExcept($class, $method, $params = array()) {
$reflectionClass = new \ReflectionClass($mock);
$methods = $reflectionClass->getMethods();
$methods = array_filter($methods, function ($m) use ($method) { return $method != $m->name; });
$methods = array_map(function ($m) { return $m->name; }, $methods);
$mock = \PHPUnit_Framework_MockObject_Generator::getMock($class, $methods, array(), '', false);
self::bindParameters($mock, $params);
$mock->__mocked = $class;
return $mock;
}
public static function makeEmpty($class, $params = array())
{
return self::factory($class, $params);
}
public static function factory($class, $params = array(), $parent = '')
{
$mock = \PHPUnit_Framework_MockObject_Generator::getMock($class, array(), array(), '', false);
self::bindParameters($mock, $params);
$mock->__mocked = $class;
return $mock;
}
public static function copy($obj, $params = array())
{
$copy = clone($obj);
self::bindParameters($copy, $params);
return $copy;
}
protected static function bindParameters($mock, $params)
{
$reflectionClass = new \ReflectionClass($mock);
foreach ($params as $param => $value) {
if (!($value instanceof \Closure)) {
$reflectionProperty = $reflectionClass->getProperty($param);
$reflectionProperty->setAccessible(true);
$reflectionProperty->setValue($mock, $value);
continue;
}
$mock->
expects(new \PHPUnit_Framework_MockObject_Matcher_AnyInvokedCount)->
method($param)->
will(new \PHPUnit_Framework_MockObject_Stub_ReturnCallback($value));
}
}
}