getMockBuilder(Migrate::class) ->disableOriginalConstructor() ->getMock(); /** @var Database|MockObject $database */ $database = $this->getMockBuilder(Database::class) ->disableOriginalConstructor() ->getMock(); /** @var Connection|MockObject $dbConnection */ $dbConnection = $this->getMockBuilder(Connection::class) ->disableOriginalConstructor() ->getMock(); /** @var SchemaBuilder|MockObject $schemaBuilder */ $schemaBuilder = $this->getMockBuilder(SchemaBuilder::class) ->disableOriginalConstructor() ->getMock(); $app = $this->getApp(['make', 'instance', 'bind', 'get']); $app->expects($this->atLeastOnce()) ->method('instance') ->withConsecutive(['db.schema'], ['db.migration']) ->willReturnOnConsecutiveCalls($schemaBuilder, $migration); $this->setExpects($app, 'bind', [SchemaBuilder::class, 'db.schema']); $this->setExpects($app, 'make', [Migrate::class], $migration); $this->setExpects($app, 'get', [Database::class], $database); $this->setExpects($dbConnection, 'getSchemaBuilder', null, $schemaBuilder); $this->setExpects($database, 'getConnection', null, $dbConnection); $serviceProvider = new MigrationServiceProvider($app); $serviceProvider->register(); } }