Предложения для файла макета Java (для насмешки java.io.File) - PullRequest
10 голосов
/ 30 июня 2010

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

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

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

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

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

Ответы [ 4 ]

5 голосов
/ 30 июня 2010

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

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

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

public class Wrapper implements MyWrapper{

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

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

2 голосов
/ 30 июня 2010

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

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

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

1 голос
/ 09 января 2013

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

0 голосов
/ 17 мая 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...