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

Spring、Spring批处理、hibernate和JUnit以及多个集成测试的初始化,spring,hibernate,junit,spring-batch,Spring,Hibernate,Junit,Spring Batch,我有一些使用spring批处理和hibernate的测试类。我的测试上下文建立了一个内存中的h2数据库,初始化了hibernate会话工厂,它创建了大部分db模式,还执行了一些特定的SQL脚本来设置spring批处理(非orm)所需的数据库模式对象。Hibernate只做了必要的工作,但spring批处理初始化脚本没有那么智能 我的测试配置使用h2嵌入式数据库,因此我可以安全地初始化所有内容一次,但是,我需要向spring传递消息,以便在运行的整个测试集合中只初始化rest集成基础架构(例如hb

我有一些使用spring批处理和hibernate的测试类。我的测试上下文建立了一个内存中的h2数据库,初始化了hibernate会话工厂,它创建了大部分db模式,还执行了一些特定的SQL脚本来设置spring批处理(非orm)所需的数据库模式对象。Hibernate只做了必要的工作,但spring批处理初始化脚本没有那么智能

我的测试配置使用h2嵌入式数据库,因此我可以安全地初始化所有内容一次,但是,我需要向spring传递消息,以便在运行的整个测试集合中只初始化rest集成基础架构(例如hbm会话工厂和spring批处理架构)一次

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

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

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

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

  • 默认情况下,为测试加载的弹簧。它将初始化一个新的上下文文件的唯一原因是,测试使用不同的上下文文件集,因此需要不同的上下文,或者测试使用
  • 为什么不直接在sql脚本中添加一个

  • 这不是我的sql脚本。它是在运行时从第三方jar文件支持的数据库风格集中选择的。我可以为每个受支持的数据库重写create和drop脚本,为每个数据库对象、索引、约束等添加存在性检查,但我希望有更多的小调整解决方案。“lastbeandefinitionwins”与应用程序上下文缓存的结合是我现在看到的。