shouldReceive('getCache') ->andReturn($pluginCache = Mockery::mock(CacheInterface::class)); $pluginManager = Mockery::mock(PluginManager::class); $pluginManager->shouldReceive('getPlugin') ->with('vendor-test_plugin') ->andReturn($plugin); $this->app->instance(PluginManager::class, $pluginManager); $provider = new TestBasePluginServiceProviderFixture($this->app, 'vendor-test_plugin'); $provider->setCacheServices([FixtureCacheConsumer::class]); $provider->register(); $consumer = $this->app->make(FixtureCacheConsumer::class); $this->assertSame($pluginCache, $consumer->cache); } public function test_register_does_not_rebind_global_cache_interface(): void { $globalCache = Mockery::mock(CacheInterface::class); $this->app->instance(CacheInterface::class, $globalCache); $plugin = Mockery::mock(PluginInterface::class); $plugin->shouldReceive('getCache')->andReturn(Mockery::mock(CacheInterface::class)); $pluginManager = Mockery::mock(PluginManager::class); $pluginManager->shouldReceive('getPlugin')->andReturn($plugin); $this->app->instance(PluginManager::class, $pluginManager); $provider = new TestBasePluginServiceProviderFixture($this->app, 'vendor-test_plugin'); $provider->setCacheServices([FixtureCacheConsumer::class]); $provider->register(); // 글로벌 바인딩이 보존되어 코어 도메인이 누수되지 않음을 검증 $this->assertSame($globalCache, $this->app->make(CacheInterface::class)); } protected function tearDown(): void { Mockery::close(); parent::tearDown(); } } class TestBasePluginServiceProviderFixture extends BasePluginServiceProvider { public function __construct($app, string $identifier) { parent::__construct($app); $this->pluginIdentifier = $identifier; } public function setCacheServices(array $services): void { $this->cacheServices = $services; } }