我正在为一个应用程序编写测试,在该应用程序中,当连接到DB2数据库时,DataSource被创建为Bean。对于测试,我希望使用内存中的H2数据库并调用main方法来运行应用程序。我已经在test文件夹中为Datasource和H2数据库创建了一个bean。但是,当我调用main方法时,控件总是转到原始应用程序,并且始终创建带有DB2数据库的Bean。如何在应用程序中使用带有H2数据库的bean?我在测试中编写的config类永远不会被调用,因此带H2 Database的bean永远不会被创建。
我在测试文件夹中有一个config类,它将在稍后的测试文件中导入。
@TestConfiguration
@AutoConfiguration
public class H2Test {
@Primary
@Bean
@ConditionalOnMissingBean
public Datasource getH2bean() {
JdbcDataSource jdbcDataSource=new JdbcDataSource();
jdbcDataSource.setURL(<<Url to the H2 in-memory Database>>);
//further code
return jdbcDataSource;
}
}
我希望在运行完整的应用程序时使用上面的bean(getH2bean
),因为我想调用应用程序的main方法。
我调用main方法的测试文件如下所示-
@SpringBootTest(classes={H2Test.class})
@ContectConfiguration(classes ={H2Test.class})
public class mainTest{
@Test
public void testMain() throws Exception{
A a=new A();
Assertions.assertDoesNotThrow(()-> a.main());
//call the main method of the application here
}
}
在这种情况下,如何在原始应用程序中使用getH2bean()
?
1条答案
按热度按时间rbl8hiat1#
看来您还没有为应用程序的开发和测试设置维护单独的配置。这基本上是保持专用Spring轮廓。
在spring-boot中,您可以创建一个
application.properties
,其中包含实际数据库的数据库配置,比如说postgre sql和包含H2数据库配置的
application-test.properties
。然后在Test类中,可以使用
@ActiveProfiles(value = "test")
注解来激活相应的概要文件,并加载与之关联的配置。有关详细信息,请参见ActiveProfiles
Eg
请注意:您可能需要将
mainTest
类中的第一行重构为@SpringBootTest(classes = YourApplication.class)
,其中YourApplication.class
是Spring-Boot应用程序的主类