У кого-либо есть предложения для объекта Файла насмешки Java? Я использую сторонний класс, который должен получить java.io. Объект файла как аргумент. Я получаю данные для этого файла в потоке по веб-сервису (также один из их продуктов).
Одно решение состоит в том, чтобы записать все эти данные в файл и предложить это классу. Это - решение, которое я не люблю: это устраняет преимущество использования веб-сервиса в земельном участке просто загрузки файла.
Более быстрый и более эффективный должен был бы поместить эти данные из памяти в Ложный Файл и предложить этот Ложный Файл стороннему классу.
Это должен был бы, вероятно, быть MockFile, расширяющий java.io. Файл и переопределяющий все функции, которые делают фактическое взаимодействие через интерфейс с файлом на жестком диске.
Я знаю, что третье лицо должно было использовать поток в качестве входного параметра в земельном участке файла. Однако это вне моего влияния.
Это просто предложение, основанное на моем понимании вашего вопроса. Я полагаю, что вы, должно быть, делаете что-то вроде этого,
public void doSomething(){
//Pre processing
Object result=new ThirdPartyCode().actualMethod(file);
//Post processing
}
Mock-объекты имеют больше смысла с точки зрения модульного тестирования. Ваша цель - не модульное тестирование функции сторонней библиотеки, а модульное тестирование метода doSomething(). Поэтому, вероятно, вы можете создать обертку вокруг сторонней функции. Возможно, что-то вроде этого,
public class Wrapper implements MyWrapper{
public Object invokeThirdPartyFunction(File file){
new ThirdPartyCode().actualMethod(file);
}
}
Теперь вы можете создать обертку-макет (реализующую тот же интерфейс) и использовать эту обертку-макет для всех ваших junit-кейсов.
Запрашивает ли тестируемый класс только имя, атрибуты и т. Д. Фиктивного файла или он действительно пытается открыть файл?
В первом случае вы можете легко создать свой макет, используя например EasyMock или эквивалентный макет фреймворка.
Последний случай более сложен, и я боюсь, что если входной поток создается внутри класса, у вас нет другого выбора, кроме как создать настоящий тестовый файл на HD.