簡體   English   中英

如何編寫彈簧規格的單元測試?

[英]How to write a unit test for spring specification?

我創建了一個構建規范類的構建器類。 它用於為JpaSpecificationExecutor創建查詢。 之所以使用該構建器,是因為我有許多可以為空/空的參數(來自用戶進行過濾),沒有它我就不能僅使用“ Specifications

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

}

我的問題是我不知道如何單獨進行測試。 當然,我可以自動連接真正的存儲庫(在內存中的db上),但我不想為此涉及任何其他類,並且僅測試邏輯,如何創建OR和AND子句。

不幸的是,在Spring API中,我找不到任何可以幫助您的方法

  1. 如果必須測試與數據庫通信的實際代碼,請使用DBUnit簡化工作,建議使用HSQLDB,以便測試可以在運行時設置其環境,而無需已安裝數據庫和配置。 在集成測試中,您檢查查詢是否正確:,可執行文件,返回預期結果,數據模型是否有效……您無需檢查集成測試中的所有可能組合,只需檢查正確的執行和預期結果即可。

  2. 如果您不必與數據庫進行對話(appendOr,appendAnd-您檢查行為,而不是數據。請檢查規范構建器具有預期的行為-apply AND或OR .....謂詞),請使用通用的模擬庫:EasyMock ,Mockito或其他任何東西,並使測試與數據庫不真正對話,這通常會使測試更快,更簡單。

因此,如果您想“僅測試邏輯,OR和AND子句的創建方式”,則可以使用模擬方法檢查創建方式,但是您應該至少對方法進行一次集成測試:規范build(),其標准數量最多appendOr,appendAnd ....

舉例來說:這是spring-data如何測試代碼的例子:

使用模擬的單元測試: https : //github.com/spring-projects/spring-data-jpa/blob/master/src/test/java/org/springframework/data/jpa/repository/query/SimpleJpaQueryUnitTests.java

和集成測試: https : //github.com/spring-projects/spring-data-jpa/blob/master/src/test/java/org/springframework/data/jpa/repository/query/JpaCountQueryCreatorIntegrationTests.java

有兩種類型的測試和乳清專用於不同的情況。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM