экстернализация объектов-заглушек - PullRequest
0 голосов
/ 09 апреля 2009

В моем проекте мы создали заглушки для тестирования юнитов в самой java (фабрике). Однако мы должны вывести эти заглушки наружу. После просмотра ряда сериализаторов / десериализаторов мы решили использовать XStream для сериализации и десериализации этих объектов-заглушек. XStream работает как шарм. Это довольно хорошо в том, что он претендует на то, чтобы быть. Ранее у нас был один заводской класс, скажем, AFactory, который производил все заглушки, необходимые для тестирования различных тестовых случаев. Теперь при выводе каждого из сгенерированных заглушек мы попадаем в блок. Мы должны были создать 1 xml-файл для каждой заготовки, изготовленной на заводе.
Например,

public final class AFactory{
     public static A createStub1(){ /*Code here */}
     public static A createStub2(){ /*Code here */}  
     public static A createStub3(){ /*Code here */}
}

Теперь, когда мы пытались переместить эти заглушки во внешние файлы, нам нужно было создать 1 xml-файл для каждой созданной заглушки (A-stub1.xml, A-stub2.xml и A-stub3.xml). Проблема этого подхода заключается в том, что он приводит к увеличению количества файлов-заглушек xml.

Я думал о том, как сохранить все заглушки, относящиеся к одному классу бинов, в одном XML-файле.

<?xml version="1.0"?>
<stubs class="A">
    <stub id="stub1">
      <!-- Here comes the externalized xml stub representation -->
    </stub>
    <stub id="stub2">
    </stub>
</stubs>

Существует ли инфраструктура, которая позволяет хранить все заглушки в представлении XML в одном файле XML, как указано выше? Или что вы, ребята, считаете правильным подходом для соблюдения?

1 Ответ

1 голос
/ 15 февраля 2010

Я не совсем уверен, почему вы пытаетесь экстернализовать объекты таким образом. Вы пытаетесь сохранить набор «тестовых объектов», которые вы можете редактировать вручную? Не зная больше о том, чего вы на самом деле пытаетесь достичь, я бы предположил, что было бы лучше реализовать это как код setUp / tearDown в ваших тестовых классах. Использование библиотеки типа JMock сделает это намного проще.

Тем не менее, если вы действительно хотите сохранить эти объекты в виде сериализованных XML-файлов, вы можете сделать это просто путем создания класса-контейнера, который содержит массив / коллекцию ваших отдельных объектов. Когда объект контейнера сериализуется, содержащиеся в нем заглушки будут храниться вместе с ним.

public class StubContainer implements Serializable {
   private ArrayList<Serializable> stubs = new ArrayList<Serializable>();

   public ArrayList<Serializable> getStubs() { 
     return stubs;
   }

   public void setStubs(ArrayList<Serializable> stubs) {
     this.stubs = stubs; 
   }
}

Кстати, если ваши потребности просты, вы можете попробовать использовать XMLEncoder / XMLDecoder , встроенный в JRE. Они очень просты в использовании, если вы не слишком разборчивы в деталях формата XML.

...