java - 防止每个 JUnit 测试的 Spring bean 重新初始化
问题描述
我有基于访问数据库的 JUnit 的集成测试。我们还使用 Liquibase Spring bean 来初始化数据库。
如果我尝试并行运行多个测试,每个测试都会尝试使用 Liquibase 初始化 DB,从而导致锁定并最终失败,因为一次只有一个 Liquibase 实例可以修改 DB。
测试配置如下:
@RunWith(SpringJUnit4ClassRunner.class)
@Transactional
@WebAppConfiguration
@Sql({"/schema/insert-test-data.sql"})
如何配置数据库初始化(模式和数据),它只执行一次而不是每次测试?
解决方案
这只是想法而不是 testet,但如果您没有并行执行脚本,那么使用ScriptUtils或ResourceDatabasePopulator iside@Before
方法和一些开关如何。
@Before
public void init(){
if (wasInitialized)
return;
new ResourceDatabasePopulator(new ClassPathResource("path/to/sql.sql")).execute(dataSource);
wasInitialized = true;
}
推荐阅读
- javascript - 使用脚本和 div 显示 g meta 以显示在另一个页面的 head 标记中
- python - 在 Python 中检查安全 cookie 会话是否处于活动状态
- hosting - justpy 应用程序无法在 AWS Lightsail 上运行;没有错误,但也没有可见的页面
- java - 在某些 pdf 查看器应用程序中无法在 android 上打开 pdf 文档的意图视图
- javascript - React table v7 动态过滤/排序
- bash - 比较同一文件Linux中两个位置之间的2个值
- java - 带有实例变量的 Spring Boot 中的线程安全
- c# - 将组合框的值插入 WPF 中的数据库
- python - 运行 python -m pytest tests 找不到包
- javascript - 从另一个反应应用程序重新渲染反应应用程序