В таких случаях нужно разделить сложносоставную функцию на части. Что я имею в виду? Предположим, что ваша функция запрашивает данные из сети или читает с диска и потом их обрабатывает. В этом случае написать надёжный автотест не получится. Ведь сеть и диск - это всегда неопределённость. Поэтому следует разделить функцию на две - получение данных и обработка данных. В этом случае обработку данных легко тетировать передав в тест специально подготовленные данные. А функцию получения данных уже можно тестировать либо на эмуляторе источника (БД в памяти, тестовый сервер, специальные файлы и т.д.) либо вообще на заглушке. А может даже и на реальных источниках данных - всё зависит. При этом формально у вас будут и юнит-тесты и интеграционные тесты при использовании в тестах внешних компонент.