2

動的ファインダーを使用して、Roo によって生成されたエンティティーがいくつかあります。

基本的に、DB 上のさまざまなテーブルからいくつかのデータをロードし、いくつかの計算を実行してから、これらの計算の結果で構成される構造化オブジェクトを出力するクラスを単体テストしようとしています。永続化レイヤーをモックしたいと思います。 DBなしでテストを実行できるようにするため(Jenkinsなど)。

ただし、これを行うための簡単な解決策が見つかりません。 を追加しようとしましたが、実際のエンティティの代わりに@MockStaticEntityMethodsRoo によって作成されたファインダーの静的メソッドが返されるTypedQueryため、モックされたオブジェクトを に渡すことができませんAnnotationDrivenStaticEntityMockingControl.expectReturn

Mockito と Powermock も使用してみましたがTypedQuery、実際のエンティティではなく、静的ファインダー メソッドが返すという問題をまだ解決できないようです。

では、Roo によって生成されたファインダーをモックする標準的な方法は何ですか?

4

2 に答える 2

1

TypedQueryのモックを作成し、モックを返すように設定してみましたか。

また、あなたの問題に対する完全な答えではありませんが、統合テストにHSQLのようなものを使用することについて考えたことはありますか?

于 2012-09-28T16:42:44.797 に答える
0

最後に、次のような TypedQuery のサブクラスを作成することでこれを解決しました。


public class DummyTypedQuery implements TypedQuery
    private T singleResult;
    private List resultList;

    public DummyTypedQuery(T singleResult) {
        this.singleResult = singleResult;
    }

    public DummyTypedQuery(List resultList) {
        this.resultList = resultList;
    }

    public DummyTypedQuery() {

    }

    @Override
    public List getResultList() {
        return resultList;
    }

    @Override
    public Object getSingleResult() {
        return singleResult;
    }
        ...the rest of implemented methods, left blank

AnnotationDrivenStaticEntityMockingControl を使用して、Roo ファインダーによって返されるように設定します。DummyTypedQuery はプログラムで作成されたモック オブジェクトを返すため、テストを実行するために DB にテスト データを用意する必要はありません (実際に DB に接続する必要もありません)。

これを行うためのよりエレガントな方法を見つけたいと思っていましたが、これが唯一の方法のようです。

于 2012-10-03T09:46:52.443 に答える