В обеих ваших функциях преобладают взаимодействия: взаимодействия с другими компонентами, взаимодействия с файловой системой. Код с преобладанием взаимодействия следует скорее тестировать с помощью интеграционного тестирования.
Например, в вашей функции deleteDir
вы, безусловно, можете попытаться смоделировать все вызовы, а затем протестировать код. Но как бы вы посмеялись над вызовом file.delete()
в конце функции? Возможно, вы бы написали макет, чтобы просто ничего не делать, но вернуть true.
К сожалению, это не поможет вам найти одну из ошибок в вашем коде: вы не удаляете символьные ссылки c. Но это также помешает вашему коду удалить окружающий каталог, потому что для удаления каталог должен быть пустым.
Юнит-тестирование и макеты не помогут вам найти эту проблему, но интеграционное тестирование (которое то есть запуск кода вместе с файловой системой и каталогами с различным содержимым, включая символьные c ссылки) покажет вам, что он не работает.