14/03/2018 - PHPUNIT
In this example we are going to mock and test a non existent class methods which produce errors below. We will test setex
and exists
methods of Predis\ClientInterface
interface. They actually exists but not in a traditional way.
Expectation failed for method name is equal to <string:setex> when invoked 1 time(s)
Trying to configure method "setex" which cannot be configured because it does not exist, has not been specified, is final, or is static.
Expectation failed for method name is equal to <string:exists> when invoked 1 time(s)
Trying to configure method "exists" which cannot be configured because it does not exist, has not been specified, is final, or is static.
declare(strict_types=1);
namespace AppBundle\Util;
use Predis\ClientInterface;
class CacheUtil
{
private $cache;
public function __construct(ClientInterface $cache)
{
$this->cache = $cache;
}
public function cache(string $id, string $value): void
{
$this->cache->setex($id, 3600, $value);
}
public function exists(string $id): int
{
return $this->cache->exists($id);
}
}
declare(strict_types=1);
namespace Tests\AppBundle\Util;
use AppBundle\Util\CacheUtil;
use PHPUnit\Framework\TestCase;
use PHPUnit_Framework_MockObject_MockObject;
use Predis\ClientInterface;
class CacheUtilTest extends TestCase
{
/** @var ClientInterface|PHPUnit_Framework_MockObject_MockObject */
private $cacheMock;
/** @var CacheUtil */
private $cacheUtil;
protected function setUp()
{
$this->cacheMock = $this
->getMockBuilder(ClientInterface::class)
->setMethods(['setex', 'exists'])
->disableOriginalConstructor()
->getMockForAbstractClass();
$this->cacheUtil = new CacheUtil($this->cacheMock);
}
/**
* @test
*/
public function it_caches()
{
$id = 'ID';
$value = 'VALUE';
$this->cacheMock
->expects($this->once())
->method('setex')
->with($id, 3600, $value)
->willReturn(true);
$this->assertNull($this->cacheUtil->cache($id, $value));
}
/**
* @test
*
* @dataProvider getCacheExistenceProvider
*/
public function it_checks_cache_existence($existence)
{
$id = 'ID';
$this->cacheMock
->expects($this->once())
->method('exists')
->with($id)
->willReturn($existence);
$this->assertSame($existence, $this->cacheUtil->exists($id));
}
public function getCacheExistenceProvider()
{
return [[0], [1]];
}
}
$ vendor/bin/phpunit --filter CacheUtilTest tests/AppBundle/Util/CacheUtilTest.php
PHPUnit 6.3.1 by Sebastian Bergmann and contributors.
... 3 / 3 (100%)
Time: 61 ms, Memory: 4.00MB
OK (3 tests, 6 assertions)