![](/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.