外化junit存根对象

时间:2009-04-09 06:38:02

标签: xml unit-testing junit xstream stub

在我的项目中,我们创建了用于测试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文件中,如上所述?或者你们建议应该采取哪种正确的方法来坚持?

1 个答案:

答案 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格式的细节不太挑剔。