IMO, это зависит от типа вспомогательной функции. Statics / Singletons очень усложняют тестирование, поскольку они распространяют конкретные зависимости. Так что, если вспомогательный метод - это то, что я мог бы подделать в модульном тесте (и ваши примеры создания файлов и подключения к базам данных определенно подпадают под эту категорию), то я бы просто создал их как методы экземпляра для обычного класса. Пользователь будет создавать экземпляр вспомогательного класса по мере необходимости для вызова методов.
Имея это в виду, проще использовать шаблоны Inversion of Control / Dependency Injection / Service Locator для подделки, когда вы хотите протестировать код и хотите имитировать доступ к базе данных или доступ к файловой системе и т. Д.
Это, конечно, имеет обратную сторону, поскольку теоретически существует несколько экземпляров вспомогательного класса, но это не является реальной проблемой в большинстве систем. Издержки при наличии этих экземпляров минимальны.
Если бы вспомогательный метод был чем-то очень простым, что я бы никогда не захотел бы подделать для теста, тогда я мог бы рассмотреть возможность использования статики.