Я не уверен в конкретных фреймворках, но общий подход с точки зрения ООП заключался бы в написании некоторых абстрактных слоев поверх любого кода доступа к файлам (интерфейсов в изобилии!) и, возможно, фасада для облегчения использования общих операций. тогда вы просто имитируете один уровень ниже кода, который вы сейчас тестируете, и тогда это, по сути, поддельная файловая система (или, по крайней мере, код, который вы тестируете, иначе не узнает).
если вы рассмотрите возможность использования инфраструктуры внедрения зависимостей, чтобы справиться с этим за вас, это упростит возможность отключать компоненты для поддельной реализации интерфейса. Если вы следуете шаблонам инверсии управления, передавая любые зависимости в конструктор класса, который вы тестируете, это также упростит тестирование.
public interface IFileSystem {
IFileHandle Load(string path);
}
public class ClassBeingTested {
public ClassBeingTested(IFileSystem fileSystem) {
}
public void DoSomethingWithFileSystem() {
}
}
Надеюсь, моя java верна, я давно не писал java, но, надеюсь, вы поймете дрейф. надеюсь, я не недооцениваю проблему и не слишком упрощаюсь!
конечно, все это предполагает, что вы имеете в виду истинное модульное тестирование, то есть тестирование минимально возможных единиц кода, а не всей системы. для интеграционного тестирования нужен другой подход.