Spring,Spring批处理,hibernate和JUnit以及多个集成测试的初始化

时间:2011-07-26 22:38:30

标签: spring hibernate junit spring-batch

我有一些使用spring-batch和hibernate的测试类。我的测试上下文在内存数据库中建立了一个h2,初始化了hibernate会话工厂,它创建了大部分的db模式,并且还执行了一些特定的SQL脚本来设置spring batch(non-orm)所需的数据库模式对象。 Hibernate做了一件非常好的工作,只做了必要的事情,但是Spring-batch初始化脚本并不那么聪明。

我的测试配置使用了h2嵌入式数据库,因此我可以安全地初始化所有内容,但是,我需要传达给spring只能初始化其余的集成基础结构(例如hbm会话工厂和弹簧批处理模式)正在运行的整个测试集合。

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

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

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

我希望这是一个非常常见的问题,我忽略了Spring或JUnit文档中的细节。

1 个答案:

答案 0 :(得分:3)

  1. 默认情况下,为测试加载的Spring caches ApplicationContext instances。它初始化的唯一原因是测试使用不同的上下文文件集,因此需要不同的上下文或测试使用@DirtiesContext annotation
  2. 为什么不在您的sql脚本中添加"if not exists"