@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]);
}


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

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

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