public function testShouldMapAnArrayValueToAnotherSchemaSchema() { // Arrange $schema = m::mock(Schema::class); $mySchema = m::mock(Schema::class); $schemaMapper = new SchemaMapper($schema); $value = ['foo' => 'bar']; $test = $this; // Act Ioc::instance('Xd\\MySchema', $mySchema); // Register MySchema in Ioc // When instantiating the SchemaMapper with the specified $param as dependency Ioc::bind(SchemaMapper::class, function ($container, $params) use($value, $mySchema, $test) { // Check if mySchema has been injected correctly $test->assertSame($mySchema, $params[0]); // Instantiate a SchemaMapper with mySchema $anotherSchemaMapper = m::mock(SchemaMapper::class, [$params[0]]); // Set expectation to receiva a map call $anotherSchemaMapper->shouldReceive('map')->once()->with($value)->andReturn(['foo' => 'PARSED']); return $anotherSchemaMapper; }); //Assert $this->assertEquals([['foo' => 'PARSED']], $this->callProtected($schemaMapper, 'mapToSchema', [$value, 'Xd\\MySchema'])); }