为了账号安全,请及时绑定邮箱和手机立即绑定

Spring Boot 测试:根据活动配置文件在测试中执行不同的 sql 脚本?

Spring Boot 测试:根据活动配置文件在测试中执行不同的 sql 脚本?

30秒到达战场 2021-08-19 17:54:34
Spring Boot Test 是否可以根据活动配置文件设置 sql 脚本的条件执行?我的意思是,我对存储库进行了集成测试,并使用了一些 @sql 注释,例如:@Sql(scripts = "/scripts/entity_test_clear.sql", executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD)对于配置文件 h2,我想执行entity_test_clear.sql对于配置文件 mysql 我想执行entity_test_clear_mysql.sql原因是我对这些数据库使用了不同的语法,尤其是这个:ALTER TABLE organisation ALTER COLUMN org_id RESTART WITH 1;ALTER TABLE organisation AUTO_INCREMENT = 1;Mysql 不理解语法 #1,而 h2 不理解语法 #2(尽管设置了 mysql 模式,如 MODE=MYSQL)默认情况下,我使用 h2 进行 IT 测试,但在一些罕见的情况下,我也想检查一切是否与 mysql 一起顺利运行。PS我当然可以尝试一个直接的解决方案,@Profile并对h2和mysql的每个测试进行硬编码,但它与测试中的大量代码重复相结合,我想避免这种情况。编辑: 测试用例如下所示:@RunWith(SpringRunner.class)@DataJpaTest@AutoConfigureTestDatabase(replace= AutoConfigureTestDatabase.Replace.NONE)public class EntityRepositoryTestIT {    @Autowired    private EntityRepository entityRepository;@Test@Sql(scripts = {"/scripts/entity_test_data.sql", "/scripts/entity_test_data_many.sql"}, executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD)@Sql(scripts = "/scripts/entity_test_clear.sql", executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD)public void findTest() {    Page<Entity> e = entityRepository.findBySomeDetails(1L, PageRequest.of(0, 20));    Assert.assertEquals(3, e.getContent().size());    Assert.assertEquals(1, e.getContent().get(0).getResources().size());// more asserts}感谢您的任何建议!
查看完整描述

2 回答

?
慕哥9229398

TA贡献1877条经验 获得超6个赞

您可以将 @Profile 注释与单独的类一起使用,每个类都用于每个 DMBS,将公共逻辑放在另一个类中以避免代码重复。您正在使用 Spring,因此您可以使用以下内容来获取它。


@Profile("mysql")

@Sql(scripts="... my mysql scripts...")

public class MySqlTests{


    @Autowired

    private CommonTestsLogic commonLogic;


    @Test

    public void mySqlTest1(){

       commonlogic.test1();

    }


}


@Profile("oracle")

@Sql(scripts="... my oracle scripts...")

public class MyOracleTests{


   @Autowired

   private CommonTestsLogic commonLogic;


   @Test

   public void myOracleTest1(){

       commonlogic.test1();

   }


}


查看完整回答
反对 回复 2021-08-19
  • 2 回答
  • 0 关注
  • 193 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信