getFieldsMethodCallCounter; return new FieldCollection(); } }; $mappedObjectCollector = new MappedObjectCollector($fieldCollector); $objectCollection = $mappedObjectCollector->buildCollection(''); Assert::assertInstanceOf(MappedObjectCollection::class, $objectCollection); Assert::assertCount(0, $objectCollection); Assert::assertEquals(0, $fieldCollector->getFieldsMethodCallCounter); } public function testBuildCollectionForOneObject(): void { $fieldCollector = new class() implements FieldCollectorInterface { public int $getFieldsMethodCallCounter = 0; public function getFields(string $object): FieldCollection { Assert::assertSame($object, 'contact'); ++$this->getFieldsMethodCallCounter; return new FieldCollection(); } }; $mappedObjectCollector = new MappedObjectCollector($fieldCollector); $objectCollection = $mappedObjectCollector->buildCollection('contact'); Assert::assertInstanceOf(MappedObjectCollection::class, $objectCollection); Assert::assertCount(1, $objectCollection); Assert::assertEquals(1, $fieldCollector->getFieldsMethodCallCounter); } public function testBuildCollectionForMultipleObjects(): void { $fieldCollector = new class() implements FieldCollectorInterface { public int $getFieldsMethodCallCounter = 0; public function getFields(string $object): FieldCollection { Assert::assertContains($object, ['company', 'contact']); ++$this->getFieldsMethodCallCounter; return new FieldCollection(); } }; $mappedObjectCollector = new MappedObjectCollector($fieldCollector); $objectCollection = $mappedObjectCollector->buildCollection('contact', 'company'); Assert::assertInstanceOf(MappedObjectCollection::class, $objectCollection); Assert::assertCount(2, $objectCollection); Assert::assertEquals(2, $fieldCollector->getFieldsMethodCallCounter); } }