@rumasterov

Как правильно протестировать такой класс?

Всем привет.

Есть следующий класс:
<?php

class ProductImporter 
{
    private function loadProductListFromExternalSource()
    {
        // обращение к внешнему сервису для загрузки товаров, возвращает массив товаров
    }
	
    private function saveProduct($product)
    {
        // сохранение товара из внешнего сервиса в локальную базу данных
    }
	
    public function import()
    {
        $products = $this->loadProductListFromExternalSource();
	
        foreach ($products as $product) {
            $this->saveProduct($product);
        }
    }
}


Как правильно протестировать такой класс? Тестировать каждый метод отдельно? Или протестировать только метод import и потом проверить что в базе данных появились товары?
  • Вопрос задан
  • 341 просмотр
Решения вопроса 1
@xfg
Тестировать нужно только публичные методы класса. Вообще лучше внедрить внешние сервисы которые отвечают за сохранение и выгрузку в конструктор этого класса, замокать работу с базой/выгрузку и написать чистый юнит-тест. Такие тесты будут быстрыми, короткими и легко поддерживаемыми. На самый важный функционал сайта потом можно будет написать несколько медленных функциональных тестов. И всё, этого вполне достаточно. Сейчас же вы хотите интеграционный тест написать. Уродливый, медленный, с кучей лишнего бойлерплейта. В этом очень мало смысла. Нужно писать юнит-тесты на свой код и только для важных фич типа оплаты или регистрации писать функциональные тесты. Интеграционные тесты не писать вообще. Помните, каждая лишняя написанная вами строка кода, требует вашей дальнейшей поддержки в будущем. Пишем тесты, которые дают наибольший результат при минимуме кода.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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