Spring:如何针对多个数据源测试同一个类?

时间:2014-05-24 22:13:39

标签: java spring junit

考虑这个例子

@Test
public TestMyProjectIntegration {

  @Rule
  public JpaRule jpaRule = new JpaRule(H2);

  @Test
  ...
}
  • 我想在H2
  • 中针对localhost数据库运行我的集成测试
  • 我想在MySQL // Jenkins
  • 中对staging数据库运行集成测试

我最初想过使用Spring Profiles并使用spring.profiles.active=developmentspring.profiles.active=staging我可以控制,但

因为我将JpaRule硬编码为H2,所以当MySQL更改

时,我不知道如何将此属性更改为spring.profiles.active

问题
在测试期间,指向不同数据库的春季推荐方法是什么?

2 个答案:

答案 0 :(得分:0)

您可以使用系统属性调用测试,传递数据库详细信息,如-Dtest.database=H2,并在从jenkins调用测试时更改值

@Rule
public JpaRule jpaRule = new JpaRule(System.getProperty("test.database"));

答案 1 :(得分:0)

你的中途....所以在每个配置文件中你需要相同的bean id dataSource

<beans profiles="dev">
    <bean id="dataSource" class="H2"/>
</beans>

<beans profiles="stage">
    <bean id="dataSource" class="MySQL"/>
</beans>

然后在JpaRule

@Rule
public JpaRule jpaRule = new JpaRule(dataSource);

然后确保在正确的环境中设置正确的spring.active.profile。