如何用Spring data r2dbc替换测试中的@Sql?

fyr*_*kov 9 spring-data project-reactor spring-data-r2dbc

在 Spring data JPA 中,有一个@Sql注释对于设置持久层的集成测试非常方便。它可以在每次测试之前推出测试数据并在测试之后执行清理。

但是,我在模块中找不到它spring-data-r2dbc。有没有类似的东西可以轻松处理这个任务spring-data-r2dbc?

fyr*_*kov 9

目前我还没有找到比org.springframework.data.r2dbc.connectionfactory.init.ScriptUtils#executeSqlScript(io.r2dbc.spi.Connection, org.springframework.core.io.Resource)与 JUnit@BeforeEach和@AfterEach测试回调一起使用更好的方法:

    @Autowired
    private ConnectionFactory connectionFactory;

    private void executeScriptBlocking(final Resource sqlScript) {
        Mono.from(connectionFactory.create())
                .flatMap(connection -> ScriptUtils.executeSqlScript(connection, sqlScript))
                .block();

    @BeforeEach
    private void rollOutTestData(@Value("classpath:/db/insert_test_data.sql") Resource script) {
        executeScriptBlocking(script);
    }

    @AfterEach
    private void cleanUpTestData(@Value("classpath:/db/delete_test_data.sql") Resource script) {
        executeScriptBlocking(script);
    }
    
Run Code Online (Sandbox Code Playgroud)

注意:这里我使用 JUnit5 和 jupiter API