2
0

AutoWireTest.php 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. <?php
  2. namespace Test\Michel\DependencyInjection;
  3. use Michel\DependencyInjection\Container;
  4. use Michel\DependencyInjection\Exception\ContainerException;
  5. use Michel\DependencyInjection\ReflectionResolver;
  6. use Michel\UniTester\TestCase;
  7. use Test\Michel\DependencyInjection\TestClass\Database;
  8. use Test\Michel\DependencyInjection\TestClass\LazyService;
  9. use Test\Michel\DependencyInjection\TestClass\Mailer;
  10. use Test\Michel\DependencyInjection\TestClass\Parameters;
  11. /**
  12. * Class AutoWireTest
  13. * @package Test\Michel\DependencyInjection
  14. */
  15. class AutoWireTest extends TestCase {
  16. protected function setUp(): void
  17. {
  18. // TODO: Implement setUp() method.
  19. }
  20. protected function tearDown(): void
  21. {
  22. // TODO: Implement tearDown() method.
  23. }
  24. protected function execute(): void
  25. {
  26. $this->testAutoWire();
  27. $this->testAutoWireDefaultParameter();
  28. $this->testAutoWireInverse();
  29. }
  30. public function testAutoWire()
  31. {
  32. $container = new Container([], new ReflectionResolver());
  33. $this->assertTrue($container->has(LazyService::class));
  34. $this->assertTrue($container->has(Database::class));
  35. $database = $container->get(Database::class);
  36. /**
  37. * @var LazyService $service
  38. */
  39. $service = $container->get(LazyService::class);
  40. $this->assertInstanceOf(LazyService::class, $service);
  41. $this->assertInstanceOf(Database::class, $database);
  42. $this->assertStrictEquals($database, $service->getDatabase());
  43. }
  44. public function testAutoWireDefaultParameter()
  45. {
  46. $container = new Container([], new ReflectionResolver());
  47. $this->assertInstanceOf(Parameters::class, $container->get(Parameters::class));
  48. $this->expectException(ContainerException::class, function () use ($container) {
  49. $container->get(Mailer::class);
  50. });
  51. }
  52. public function testAutoWireInverse()
  53. {
  54. $container = new Container([], new ReflectionResolver());
  55. /**
  56. * @var LazyService $service
  57. */
  58. $service = $container->get(LazyService::class);
  59. $this->assertStrictEquals($container->get(Database::class), $service->getDatabase());
  60. }
  61. }