1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
|
<?php
declare(strict_types=1);
namespace DI\Test\UnitTest\Definition\Resolver;
use DI\Definition\InstanceDefinition;
use DI\Definition\ObjectDefinition;
use DI\Definition\ObjectDefinition\MethodInjection;
use DI\Definition\ObjectDefinition\PropertyInjection;
use DI\Definition\Resolver\InstanceInjector;
use DI\Definition\Resolver\ResolverDispatcher;
use DI\Proxy\ProxyFactory;
use DI\Test\UnitTest\Definition\Resolver\Fixture\FixtureClass;
use PHPUnit\Framework\TestCase;
/**
* @covers \DI\Definition\Resolver\InstanceInjector
*/
#[\PHPUnit\Framework\Attributes\CoversClass(\DI\Definition\Resolver\InstanceInjector::class)]
class InstanceInjectorTest extends TestCase
{
/**
* @test
*/
#[\PHPUnit\Framework\Attributes\Test]
public function should_inject_properties_on_instance()
{
$instance = new FixtureClass('');
$objectDefinition = new ObjectDefinition(get_class($instance));
$objectDefinition->addPropertyInjection(new PropertyInjection('prop', 'value'));
$resolver = $this->buildResolver();
$resolver->resolve(new InstanceDefinition($instance, $objectDefinition));
$this->assertEquals('value', $instance->prop);
}
/**
* @test
*/
#[\PHPUnit\Framework\Attributes\Test]
public function should_inject_methods_on_instance()
{
$instance = new FixtureClass('');
$objectDefinition = new ObjectDefinition(get_class($instance));
$objectDefinition->addMethodInjection(new MethodInjection('method', ['value']));
$resolver = $this->buildResolver();
$resolver->resolve(new InstanceDefinition($instance, $objectDefinition));
$this->assertEquals('value', $instance->methodParam1);
}
private function buildResolver(): InstanceInjector
{
$this->markTestSkipped('Requires mnapoli/phpunit-easymock');
/** @var ResolverDispatcher $resolverDispatcher */
$resolverDispatcher = $this->easyMock(ResolverDispatcher::class);
/** @var ProxyFactory $factory */
$factory = $this->easyMock(ProxyFactory::class);
return new InstanceInjector($resolverDispatcher, $factory);
}
}
|