3

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

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

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

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

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

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

4

1 回答 1

3
  1. 默认情况下,Spring缓存为测试加载的 ApplicationContext 实例。它会初始化一个新文件的唯一原因是测试使用了一组不同的上下文文件,因此需要不同的上下文,或者测试使用了@DirtiesContext 注释
  2. 为什么不在你的 sql 脚本中添加一个“如果不存在”呢?
于 2011-07-26T23:24:48.497 回答