Spring,Spring Batch,Hibernate和JUnit以及用于多个集成测试的初始化

我有一些利用Spring-Batch和Hibernate的测试类.我的测试上下文在内存数据库中建立h2,初始化了休眠会话工厂,该工厂创建了大多数db模式,还执行了一些特定的SQL脚本来设置spring batch(非orm)所需的数据库模式对象. Hibernate只做必要的事情就做得很好,但是spring-batch初始化脚本并不那么聪明.

我的测试配置使用h2嵌入式数据库,因此我可以安全地对所有内容进行一次初始化,但是,我需要传达给spring,以便对整个集合进行一次初始化其余的集成基础架构(例如hbm会话工厂和spring-batch模式).测试正在运行.

我的单元测试全部单独运行,但是测试2至N在测试整个程序包时失败,因为它们重复执行相同的数据库模式初始化,并且死于(db)对象已经存在错误.

我希望为整个集成测试集合初始化一个应用程序上下文,然后将特定测试的详细信息的配置委派给MyTest-context,但在运行单个集成测试时仍然初始化主应用程序上下文.

我有一组通用的spring配置文件,这些文件被导入到测试上下文中,以初始化测试应用程序服务所需的基础结构.问题来自在程序包中运行所有测试等.测试系统多次调用相同的初始化.

我希望这是一个非常普遍的问题,并且我忽略了spring或JUnit文档中的详细信息.

最佳答案
>默认情况下,为测试加载的Spring caches ApplicationContext instances.初始化一个新文件的唯一原因是测试使用了不同的上下文文件集,因此需要不同的上下文,或者测试使用了@DirtiesContext annotation.
>为什么不只是在您的SQL脚本中添加“if not exists”

相关文章

这篇文章主要介绍了spring的事务传播属性REQUIRED_NESTED的原...
今天小编给大家分享的是一文解析spring中事务的传播机制,相...
这篇文章主要介绍了SpringCloudAlibaba和SpringCloud有什么区...
本篇文章和大家了解一下SpringCloud整合XXL-Job的几个步骤。...
本篇文章和大家了解一下Spring延迟初始化会遇到什么问题。有...
这篇文章主要介绍了怎么使用Spring提供的不同缓存注解实现缓...