在我的项目中,我们创建了用于测试java(工厂)本身的junits的存根文件。但是,我们必须外化这些存根。在看到许多序列化器/反序列化器之后,我们决定使用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 */}
}
现在,当尝试将此存根移动到外部文件时,我们必须为每个创建的存根(A-stub1.xml,A-stub2.xml和A-stub3.xml)创建1 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文件中,如上所述?或者你们建议应该采取哪种正确的方法来坚持?
答案 0 :(得分: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格式的细节不太挑剔。