Задать вопрос
@kirill-93

Как писать юнит тесты?

Здравствуйте. У себя в проекте я пишу функциональные тесты. То есть я в тестах обращаюсь к АПИ с некоторыми параметрами и проверяю ответ. Тут мне все ясно и понятно. Но я не могу понять, как мне начать писать юнит-тесты. В примерах всегда какая-то банальная функция (a + b) и тест на нее.
Вот, например, типичный код:
//controller
public function getProfiles(User $user): View
{
    //validation
    $profiles = $this->userService->getProfiles($user);
    $results = $this->profileDTOMapper($results);
    
    return View($results);
}

//Service
public function getProfiles(User $user): array
{
    //some logic
    $profiles = $this->userRepository->getProfiles($user);
    //some logic

    return $profiles;
}

//userRepository
public function getProfiles(User $user): array
{
    $this->findAllBy(['user_id' => $user]);
}


Вот где тут и как писать юнит тесты? Что они должны проверять?
  • Вопрос задан
  • 110 просмотров
Подписаться 1 Простой 7 комментариев
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия Fullstack веб-разработчик на JavaScript и PHP
    20 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 1
lenk0belk0
@lenk0belk0
программироваю
Для того, чтобы писать юнит тесты, этот код надо разбить на более специализированные классы, которые будет тестировать гораздо удобнее. Например, в контроллере есть вызов `$this->profileDTOMapper` - тут сразу просится отдельный класс `profileDTOMapper` с методом `map`, который на различных входных данных можно оттестировать как угодно. Потом сервис, вижу комментарий, что там есть какая-то логика. Можно ли эту логику вынести в отдельный класс (или даже несколько классов) и там ее протестировать отдельно от сервиса? Скорее всего да.
И так далее, разбивая код на классы, чтобы у каждого была своя узкая задача, у которой нет зависимостей от других классов (или одна-две связи максимум, чтобы не инициализировать моками вселенную каждый раз).
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽