Подтвердить что ты не робот

Предложения для java Mock File (для извлечения java.io.File)

Есть ли у кого-нибудь предложения для объекта java mock File? Я использую класс третьей стороны, который должен получить объект java.io.File в качестве аргумента. Я получаю данные для этого файла в потоке через webservice (также один из их продуктов).

Одно из решений - записать все эти данные в файл и предложить это классу. Это решение, которое мне не нравится: оно устраняет преимущество использования web-сервиса вместо простое скачивание файла.

Быстрее и эффективнее было бы поместить эти данные из памяти в файл Mock и предложить этот Mock файл классу thirdparty.

Вероятно, это должен быть MockFile, расширяющий java.io.File и переопределяющий все функции, которые фактически взаимодействуют с файлом на жестком диске.

Я знаю, что третье лицо должно было использовать поток в качестве входного аргумента вместо файла. Однако это выходит за рамки моего влияния.

4b9b3361

Ответ 1

Это просто предложение, основанное на моем понимании вашего вопроса. Я считаю, вы должны делать что-то вроде этого,

public void doSomething(){
      //Pre processing
       Object result=new ThirdPartyCode().actualMethod(file);
     //Post processing
}

Макетные объекты имеют больше смысла с точки зрения модульного тестирования. Ваша цель состоит не в функции unit test функции сторонней библиотеки. В этом случае используется метод unit test doSomething(). Поэтому, возможно, вы можете создать обертку вокруг сторонней функции. Возможно, что-то вроде этого,

public class Wrapper implements MyWrapper{

   public Object invokeThirdPartyFunction(File file){
      new ThirdPartyCode().actualMethod(file);
   }
}

Теперь вы можете создать макетную оболочку (реализующую один и тот же интерфейс) и использовать эту макетную обертку для всех случаев junit.

Ответ 2

Проверяет ли тестируемый класс только запрос имени файла, атрибутов и т.д. или пытается ли он открыть файл?

В первом случае вы можете легко создать свой макет с использованием, например, EasyMock или эквивалентную фальшивую фреймворк.

Последний случай более сложный, и я боюсь, что входной поток создается внутри класса, у вас нет другого выбора, кроме фактического создания реального тестового файла на HD.

Ответ 3

Вы можете загрузить сторонний код, используя загрузчик классов на базе ASM, который отображает java.io.File в вашу собственную "поддельную" реализацию. Это немного работы, и ее нужно выполнять тщательно... Например, вам также нужно будет отобразить FileInputStream и т.д.

Ответ 4

Вы не используете файл (или любую внешнюю зависимость в модульных тестах). Кроме использования mocks, ваши подходы приведут к проблемным испытаниям. См. эту статью javaranch для более