Я не уверен насчет конкретных каркасов, но общий подход с точки зрения ООП состоит в том, чтобы написать несколько абстрактных слоев поверх любого кода доступа к файлу (интерфейсы в изобилии!) И, возможно, фасад для облегчения использования обычных операций. затем вы просто макетируете один слой ниже кода, который вы сейчас тестируете, и тогда это по сути фальшивая файловая система (или, по крайней мере, код, который вы тестируете, иначе не будет знать).
Если вы захотите использовать инфраструктуру внедрения зависимостей для этого, это упростит возможность переключения компонентов для искусственной реализации интерфейса. если вы будете следовать шаблонам инверсии управления, передавая любые зависимости в конструктор класса, который вы тестируете, это также облегчит тестирование.
public interface IFileSystem {
IFileHandle Load(string path);
//etc
}
public class ClassBeingTested {
public ClassBeingTested(IFileSystem fileSystem) {
//assign to private field
}
public void DoSomethingWithFileSystem() {
//utilise interface to file system here
//which you could easily mock for testing purposes
//by passing a fake implementation to the constructor
}
}
Я надеюсь, что моя Java верна, я давно не писал на Java, но, надеюсь, вы получите дрейф. надеюсь, я не недооцениваю проблему здесь и слишком упрощен!
конечно, все это предполагает, что вы имеете в виду истинное модульное тестирование, то есть тестирование наименьших возможных блоков кода, а не всей системы. для интеграционного тестирования необходим другой подход.