ProxyMock
THISÂ PACKAGEÂ ISÂ ABANDONNED, (*1)
To replace a service of the Symfony container with a mock make a public alias on the service and then you're able to set
a mock for it in the test case (if you have access to the container which is the case in ÌSymfony's KernelTestCase)., (*2)
config/services.yaml, (*3)
services:
my.service:
class:Â My\Service
config/services_test.yaml, (*4)
services:
my.service.test:
alias: my.service
public:Â true
Your test case extends KernelTestCase, (*5)
use My\Service;
use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;
final class ConsumeUserMessagesFromCoreTest extends KernelTestCase
{
public function testSomething(): void
{
//Â Access the service over the public alias defined in "services_test.yaml"
self::$container->set('my.service.test', $this->getMockBuilder(Service::class)->getMock());
}
}
, (*6)
This library helps to create a proxy instance of a class which then can hold a PHPUnit
mock of it. That way you can manipulate the mock which sits inside the proxy class but
never have to change the proxy class., (*7)
This can be useful for example in cases of read-only containers where you can't
override services at runtime. (The dependency injection container component of
Symfony 4 will most likely behave like that.), (*8)
class Foo { ... }
$factory = new ProxyMockFactory();
$proxyMock = $factory->create(Foo::class);
// In a PHPUnit test case
$mock = $this->getMockBuilder(Foo::class)
->disableOriginalConstructor()
->getMock();
$proxyMock->setMock($mock);