0

在我的项目中,我们创建了用于在 java(factories) 本身中测试 junit 的存根文件。但是,我们必须将这些存根外部化。在看到许多序列化器/反序列化器之后,我们决定使用 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 存根文件的扩散。

我在想,如何将与单个 bean 类相关的所有存根保存在单个 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 文件中,如上?或者你们建议应该坚持的正确方法是什么?

4

1 回答 1

1

我不确定您为什么要尝试以这种方式将对象外部化。您是否正在尝试维护一组可以手动编辑的“测试对象”?由于不了解您实际要完成的工作,我建议最好在测试类中将其实现为 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; 
   }
}

顺便说一句,如果您的需求很简单,您可以尝试使用JRE 中内置的XMLEncoder / XMLDecoder 。它们使用起来非常简单,只要您对 XML 格式的细节不太挑剔。

于 2010-02-15T18:07:53.450 回答