@kaxa3201

Как протестировать вложенные объекты?

Имеются вложенные DTO объекты, у каждого объекта имеются обязательные поля которые должен заполнить клиент.
Хочу протестировать заполнение всех обязательных полей, но не могу понять как это сделать. Пробовал как то использовать dataprovider , но как то всё громоздко получается.
Ниже пример все сеттеры которые написаны обязательны, я хочу убедиться что если их не заполнить то я получу ошибку.
/**
     * @dataProvider  validationFieldsErrors
     */
    public function testGetContentInValidateFields($data, string $message): void
    {
        $this->expectException(ValidationException::class);
        $this->expectExceptionMessage($message);
        $this->adapter->getContent($data);
    }

    public function validationFieldsErrors(): array
    {
        $detailsDTO = new ListingDetailsDTO();
        $listing = new ListingDTO();
        $location = new LocationDTO();

        $adContent = new AdContentDTO();
        $adContent->setHeadline('headline');
        $adContent->setPropertyName('propertyName');
        $adContent->setDescription('description');

        $units = new UnitDTO();
        $listing->setIsActive(true);
        $listing->setAdContent($adContent);
        $listing->setLocation($location);
        $listing->setUnits([$units]);
        $detailsDTO->setListing($listing);

        return [
            [new ListingDetailsDTO(), 'This value should not be blank.listing'],
            [
                $detailsDTO,
                'This value should not be blank.listing.adContent.description'
            ],
        ];
    }
  • Вопрос задан
  • 83 просмотра
Пригласить эксперта
Ответы на вопрос 1
1) Если всё поля в DTO обязательные - лучше требовать передавать их в конструкторе, и делать DTO имутабельной.
2) Если необходимо поэтапно сетить разные фрагменты DTO - можно использовать для этого паттерн Builder
3) Dataprovider в PHPUnit может быть генератором, и возвращать кейсы через yield. Таким образом мы можем в процессе заполнения одного объекта поэтапно тестировать его валидность.
4) Для каждой DTO можно писать отдельный тест, а вместо обязательных дочерок создавать моки.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы