Как правильно покрыть тестами модуль парсинга и генерации данных?
===================================================================

 Тяжело дается написание тестируемого кода и хороших тестов на практике, хочу переписать старый модуль по парсингу Excel файла и замороченной генерации данных по методике TDD для тренировки (чтобы не писать плохой код, а потом не знать, с какой стороны к нему подойти).   

  

Чем больше анализирую, тем сложнее понять, что я вообще могу покрыть тестами, если важные части логики сокрыты в таких шагах:  

- убедиться, что из файла получена правильная структура данных  

- сгенерировать данные по шаблону, который подразумевает сохранение большого количества промежуточных данных в базе, генерация идет в несколько этапов  

- убедиться, что конечные сгенерированные данные целостны по ряду правил  

  

Из всего этого я могу понять, как написать функциональные тесты последнего шага, если нагенерить валидные данные через фикстуры, остальные два этапа потребуют перемокать миллион классов, работу с файлами, работу с базой.  

Получается, что юнит тесты тут мало чем помогут, если начать мокать все подряд, а без моков они превратятся в функциональные или end-to-end тесты.  

  

Можете пожалуйста рассказать, как вы поступали в похожих ситуациях или дать ссылку на материал, где такие задачи решали? 

<https://github.com/index0h/php-conventions#8-phpunit>