2009-04-09 17 views
0

私のプロジェクトでは、java(工場)自体のjunitsをテストするためのスタブファイルを作成しました。しかし、これらのスタブを外部化する必要があります。多くのシリアライザ/デシリアライザを見た後、XStreamを使用してこれらのスタブオブジェクトを直列化および逆シリアル化することに決めました。 XStreamは魅力的に機能します。それはそれが主張するものにかなり良い。以前は、異なるテストケースをテストするために必要なすべてのスタブを生成するAFactoryという単一のファクトリクラスがありました。生成されたスタブのそれぞれを外部化すると、ロードブロックが発生しました。ファクトリで作成されたスタブごとに1つのxmlファイルを作成する必要がありました。
例えば 、今 外部化junitスタブオブジェクト

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、-stub2.xmlおよびA-作成された各スタブのための1つのxmlファイルを作成する必要がありましたstub3.xml)。このアプローチの問題点は、xmlスタブファイルが増えてしまうことです。

私は、単一のXMLファイルに単一のBeanクラスに関連するすべてのスタブを保持することを考えていました。

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

上記のようにすべてのスタブをxml形式で1つのxmlファイルに保存できるフレームワークはありますか?または、あなたは何を守るべき正しいアプローチであるとお考えですか?

+0

junitテストについては[wire mock](http://wiremock.org)、機能や性能については[stubby-db](https://www.npmjs.com/package/stubby-db)をご覧くださいテスト。 –

答えて

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形式の詳細についてあまり気にしない限り、これらは使いやすいです。