/ / eksternalizacja obiektów junit stub - xml, testy jednostkowe, junit, xstream, stub

eksternalizowanie obiektów pośredniczących junit - xml, testowanie jednostek, junit, xstream, stub

W moim projekcie stworzyliśmy pliki pośredniczące do testówjunits w java (fabrykach). Musimy jednak uzewnętrznić te kody pośredniczące. Po obejrzeniu wielu serializatorów / deserializatorów zdecydowaliśmy się na użycie XStream do serializacji i deserializacji tych obiektów pośredniczących. XStream działa jak marzenie.Jest całkiem niezły w tym, za co się podaje. Wcześniej mieliśmy jedną klasę fabryczną, AFactory, która produkowała wszystkie kody pośredniczące potrzebne do testowania różnych przypadków testowych. Teraz podczas eksternalizacji każdego wygenerowanego kodu pośredniego napotkaliśmy blokadę drogową. Musieliśmy utworzyć 1 plik xml dla każdego kodu pośredniczącego wyprodukowanego przez fabrykę.
Na przykład,

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

Teraz, próbując przenieść te kody pośredniczące na zewnętrznypliki, musieliśmy utworzyć 1 plik xml dla każdego utworzonego kodu pośredniczącego (A-stub1.xml, A-stub2.xml i A-stub3.xml). Problem z tym podejściem polega na tym, że prowadzi ono do mnożenia się plików pośredniczących xml.

Zastanawiałem się, jak zachować wszystkie kody pośredniczące związane z jedną klasą fasoli w jednym pliku xml.

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

Czy istnieje framework, który pozwala zachować cały kod pośredniczący w reprezentacji XML w pojedynczym pliku xml, jak powyżej? Albo co według was powinno być właściwym podejściem do przestrzegania?

Odpowiedzi:

1 dla odpowiedzi № 1

Naprawdę nie jestem pewien, dlaczego próbujeszw ten sposób eksternalizować obiekty. Czy próbujesz zachować zestaw „obiektów testowych”, które możesz edytować ręcznie? Nie wiedząc więcej o tym, co faktycznie próbujesz osiągnąć, zasugerowałbym, że byłoby lepiej zaimplementować to jako kod setUp / tearDown w twoich klasach testowych. Używając biblioteki takiej jak JMock znacznie to ułatwi.

To powiedziawszy, jeśli naprawdę chcesz je zachowaćobiektów jako zserializowane pliki XML, możesz to zrobić po prostu tworząc klasę „kontenera”, która przechowuje tablicę / kolekcję twoich indywidualnych obiektów. Gdy obiekt kontenera jest serializowany, zawarte w nim kody pośredniczące będą przechowywane wraz z nim.

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

Nawiasem mówiąc, jeśli Twoje potrzeby są proste, możesz spróbować użyć XMLEncoder/XMLDecoder, które są wbudowane w środowisko JRE. Są bardzo proste w użyciu, o ile nie jesteś zbyt wybredny, jeśli chodzi o szczegóły formatu XML.