簡體   English   中英

在Maven中完成集成測試后如何運行軟件包目標?

[英]How run package goal after finished integration tests in maven?

默認的構建Maven周期是這樣的:

  1. 編譯
  2. 測試
  3. 整合前測試
  4. 整合測試
  5. 整合后測試
  6. 校驗
  7. 安裝

pre-intergation-test將啟動一個數據庫。 集成intergation-test是彈簧測試,在啟動應用程序並對數據庫進行測試時。 post-intergation-test數據庫已關閉。

因此,對於那種情況,不需要打包整個應用程序,是否有一種方法可以驗證目標之后打包應用程序?

Maven生命周期中的集成測試階段的目的是測試打包的工件。 因此,嘗試在打包階段之前執行集成測試沒有任何意義。

另一方面,您具有測試階段以執行單元測試。 如果您遵循單元測試的嚴格定義,那么它們就不需要數據庫。 換句話說,在單元測試執行期間:應該模擬數據庫。

據我了解您的情況,您有需要數據庫的單元測試。 這不是一個完美的設計,在理想情況下,您應該考慮重新設計單元測試,以使用模擬而不是數據庫。

但是,您也可以使用某種中間解決方案,在其中在測試階段之前/之后啟動/停止數據庫。 這是完整的生命周期參考 ,如您所見,您可以將數據庫啟動綁定到generate-test-resources階段。 (我不推薦這種解決方案,因為您的單元測試變得繁重,並且在IDE中運行它們也變得更加復雜,因為它需要執行maven階段)

常用的替代解決方案是在測試本身中設置一個小的內存數據庫。 使用spring非常容易,這是一個示例測試配置,以證明:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder;
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType;

import javax.sql.DataSource;

@Configuration
public class UnitTestWithDBConfiguration {

    @Bean
    public DataSource dataSource(){
        return new EmbeddedDatabaseBuilder()
                .setType(EmbeddedDatabaseType.H2)
                .setScriptEncoding("UTF-8")
                .ignoreFailedDrops(true)
                .addScript("dbsetup.sql")
                .build();
    }

}

此示例使用h2數據庫+ src / test / resources / dbsetup.sql文件初始化數據庫(在加載應用程序上下文時)。

暫無
暫無

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

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