![](/img/trans.png)
[英]How to make integration tests and unit tests run separately through maven?
[英]How run package goal after finished integration tests in maven?
默認的構建Maven周期是這樣的:
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.