2009-04-09 8 views
0

In meinem Projekt haben wir Stub-Dateien zum Testen von Junits in Java (Fabriken) selbst erstellt. Allerdings müssen wir diese Stubs externalisieren. Nachdem wir eine Reihe von Serialisierern/Deserializern gesehen hatten, entschieden wir uns, XStream zu verwenden, um diese Stub-Objekte zu serialisieren und zu deserialisieren. XStream funktioniert wie ein Charme. Es ist ziemlich gut in dem, was es zu sein behauptet. Zuvor hatten wir eine einzige Fabrikklasse namens AFactory, die alle Stubs produzierte, die zum Testen verschiedener Testfälle benötigt wurden. Wenn wir nun jeden erzeugten Stub externalisieren, treffen wir auf eine Straßensperre. Wir mussten für jeden von der Fabrik produzierten Stub eine XML-Datei erstellen.
Zum Beispielexternalizing junit Stub Objekte

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

, nun diese Stummel auf externe Dateien zu bewegen versucht, wir hatten 1 XML-Datei für jede Stub (A-stub1.xml erstellt zu schaffen, A-stub2.xml und A- stub3.xml). Das Problem mit diesem Ansatz ist, dass es zur Verbreitung von XML-Stub-Dateien führt.

Ich dachte, wie wäre es, alle Stubs in Bezug auf eine einzelne Bean-Klasse in einer einzigen XML-Datei zu speichern.

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

Gibt es ein Framework, mit dem Sie alle Stub in XML-Darstellung in einer einzigen XML-Datei wie oben beibehalten können? Oder Was meinst du, sollte der richtige Ansatz sein, um sich daran zu halten?

+0

Werfen Sie einen Blick auf [wire mock] (http://wiremock.org) für Junit-Tests und [stubby-db] (https://www.npmjs.com/package/stubby-db) für Funktion oder Leistung Tests. –

Antwort

1

Ich bin nicht wirklich sicher, warum Sie Objekte auf diese Weise externalisieren möchten. Versuchen Sie, eine Reihe von Testobjekten zu verwalten, die Sie manuell bearbeiten können? Wenn ich nicht mehr darüber weiß, was Sie eigentlich erreichen wollen, würde ich vorschlagen, dass es besser ist, dies als setUp/tearDown-Code in Ihren Testklassen zu implementieren. Mit einer Bibliothek wie JMock wird dies viel einfacher.

Wenn Sie diese Objekte wirklich als serialisierte XML-Dateien behalten möchten, können Sie dies einfach tun, indem Sie eine "Container" -Klasse erstellen, die ein Array/eine Sammlung Ihrer individuellen Objekte enthält. Wenn das Containerobjekt serialisiert wird, werden die enthaltenen Stubs zusammen mit diesem gespeichert.

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; 
    } 
} 

Übrigens, wenn Ihre Anforderungen einfach sind, können Sie versuchen, XMLEncoder/XMLDecoder verwenden, die in die JRE gebaut kommen. Sie sind sehr einfach zu verwenden, solange Sie nicht zu wählerisch bei den Details des XML-Formats sind.