我有一个带@Scheduled方法的@Component,每隔x分钟运行一次(固定延迟) 在运行我的集成@SpringBootTest时,使用应用程序上下文初始化此组件,然后执行我的测试方法
调度程序定期轮询DB并执行某些逻辑。因此,只要加载应用程序上下文,就需要在h2数据库中预先加载数据
@Component
public class MyScheduler {
...
...
@Scheduled(fixedDelayString = "${poll.interval:300}")
public void testXYZ() throws Exception {
dbService.fetchRecords();
//do blah blah
}
}
如何在加载@SpringBootTest应用程序上下文之前在h2中预加载初始数据?
我希望在集成测试中出现服务后,基于少量@Scheduled定期运行来执行数据断言
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
public class MyIntegrationTest{
...
@Test
@Sql(scripts={"classpath:data/data.sql"},
config=@SqlConfig(transactionMode = TransactionMode.ISOLATED),
executionPhase = ExecutionPhase.BEFORE_TEST_METHOD)
testMySchedulerLogic() {
assertTrue(isProcessed(), true);
}
}
答案 0 :(得分:2)
使用您需要的数据在测试资源中创建import.sql文件。
此外,如果Hibernate从头开始创建架构(即,如果ddl-auto属性设置为create或create-drop),则在启动时会在启动时执行类路径根目录中名为import.sql的文件。这对于演示和测试很有用,如果你小心,但可能不是你想要在生产中的类路径上。它是一个Hibernate功能(与Spring无关)。
来源:https://docs.spring.io/spring-boot/docs/current/reference/html/howto-database-initialization.html