/ / externalizácia junit stub objektov - xml, unit-testing, junit, xstream, stub

externalizujúce jantárové stubové objekty - xml, unit-testing, junit, xstream, stub

V mojom projekte sme vytvorili stub súbory na testovaniesamotné jits v jave (továrne). Musíme však tieto pahýly externalizovať. Keď sme videli množstvo serializátorov / deserializátorov, rozhodli sme sa použiť program XStream na serializáciu a deserializáciu týchto stub objektov. Xstream Funguje ako kúzlo. Je to celkom dobré v tom, za čo sa vydáva. Predtým sme mali jedinú továrenskú triedu AFactory, ktorá produkovala všetky pahýle potrebné na testovanie rôznych testovacích prípadov. Teraz, keď sme externalizovali každý z vygenerovaných pahýľov, narazili sme do prekážky. Museli sme vytvoriť 1 xml súbor pre každý pahýl vyrobený v továrni.
Napríklad,

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

Teraz, keď sa pokúšate presunúť tieto pahýly do externejsúborov, museli sme vytvoriť 1 xml súbor pre každý vytvorený pahýl (A-stub1.xml, A-stub2.xml a A-stub3.xml). Problém s týmto prístupom spočíva v tom, že vedie k rozšíreniu súborov XML so stubom.

Rozmýšľal som, čo tak zachovať všetky pahýle súvisiace s jednou triedou fazule v jednom XML súbore.

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

Existuje rámec, ktorý vám umožní uchovať všetky útržky v xml reprezentácii v jednom xml súbore, ako je uvedené vyššie? Alebo Čo navrhujete, chlapci, by mal byť správny prístup k dodržiavaniu?

odpovede:

1 pre odpoveď č. 1

Nie som si úplne istý, prečo sa to snažíšexternalizovať objekty týmto spôsobom. Snažíte sa udržiavať množinu „testovacích objektov“, ktoré môžete upravovať ručne? Neviem viac o tom, čo sa vlastne snažíte dosiahnuť, navrhujem, že by bolo lepšie implementovať to ako kód setUp / tearDown do svojich testovacích tried. Používanie knižnice ako JMock toto oveľa uľahčí.

To znamená, že ak si ich naozaj chcete nechaťobjekty ako serializované súbory XML, môžete to urobiť jednoducho vytvorením triedy „kontajner“, ktorá obsahuje pole / kolekciu vašich jednotlivých objektov. Keď bude objekt kontajnera serializovaný, obsiahnuté pahýly sa uložia spolu s ním.

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

Mimochodom, ak sú vaše potreby jednoduché, môžete skúsiť použiť XMLEncoder/XMLDecoder, ktoré sú zabudované do JRE. Používajú sa veľmi ľahko, pokiaľ nie ste príliš nároční na podrobnosti formátu XML.