2017-06-21 10 views
0

私はSpecificationsオブジェクトを構築するビルダークラスを作成しました。 JpaSpecificationExecutorのクエリを作成するために使用されます。スプリング仕様の単体テストを書くには?

public class SpecificationBuilder<T> { 

    private Specifications<T> specification; 

    public SpecificationBuilder() { 

    } 

    public SpecificationBuilder(final Specification<T> spec) { 
     specification = Specifications.where(spec); 
    } 

    public SpecificationBuilder<T> appendOr(final Specification<T> spec) { 
     specification = Specifications.where(spec).or(specification); 
     return this; 
    } 

    public SpecificationBuilder<T> appendAnd(final Specification<T> spec) { 
     specification = Specifications.where(spec).and(specification); 
     return this; 
    } 

    public Specification<T> build() { 
     return Specifications.where(specification); 
    } 

} 

ここに私の問題は、私は方法がわからないということです。ビルダーは、私は(フィルタリングのためのユーザから来ている)空/ nullにすることができ、私はそれなしでちょうどSpecificationsを使用することはできません多くのパラメータを持っているので、使用されていますそれを孤立してテストします。もちろん、私は実際のリポジトリ(インメモリDB上)をautowireすることができますが、他のクラスは含まず、ロジックのみをテストしたい、ORとAND節をどのように作成するのですか。私はあなたがDBに話し、実際のコードをテストする必要がある場合

+0

これは私がジェネリック仕様書を書くことを意味するもので、JPAの背後にある意図を書き換えていると思います。私は特定の仕様のみを書いていますが、ほとんどのケースはSpring JPAで処理できます。もちろん私の個人的な意見。 –

+0

私は10個のパラメータを持つことができますが、空でもなくてもかまいません。私は10を書くことができません!単一仕様 – ByeBye

答えて

1
  1. を支援する任意の方法を見つけることができません残念ながら、春のAPIに

    は、あなたの人生を容易に行うためのDBUnitのを使用し、あなたが使用することをお勧めしますHSQLDBを使用することで、データベースをインストールして設定することなく、実行時に環境を設定することができます。 インテグレーションテスト内部では、正しいか、実行可能か、期待どおりの結果を返し、データモデルが有効かどうかをチェックします。インテグレーションテスト内の可能なすべての組み合わせをチェックする必要はありません。 。

  2. DBとの対話(appendOr、appendAnd - データではなく、データではなく、仕様ビルダが動作を期待していることを確認する - AND、OR .....述語)を使用する場合は、a一般的な模擬ライブラリ:EasyMock、Mockitoなど、テストは実際にはDBとは話しません。これは通常、テストをより迅速かつ簡単に行います。

  3. ので

、あなたがしたい場合は、「テストのみロジック、どのようにORおよびAND句が作成されている」あなたは創造の道をチェックするためにモックを使うことができますが、メソッドの分1つの統合テストを持っている必要があります:仕様ビルド( )appendOr、appendAndような基準の最大量と....

ジャスト例えば:ここでどのばねデータのテストコード、例えばある:https://github.com/spring-projects/spring-data-jpa/blob/master/src/test/java/org/springframework/data/jpa/repository/query/SimpleJpaQueryUnitTests.java

と :使用モックと

単体テスト統合nテスト: https://github.com/spring-projects/spring-data-jpa/blob/master/src/test/java/org/springframework/data/jpa/repository/query/JpaCountQueryCreatorIntegrationTests.java

異なるケースに専用のテストとホエーがあります。

関連する問題