我需要在数据库(连接,关闭数据库..)错误期间对应用程序行为进行Spring测试。 是否可以通过Spring单元测试关闭/杀死或启动H2内存数据库?
答案 0 :(得分:0)
在使用h2测试数据库运行Junit测试时,该数据库实例将在测试套件开始运行时启动,并在测试完成时停止(假设您已使用bean配置了数据库)。
如果您使用的是spring-boot,则可以像下面这样配置h2测试数据库:
src / test / resources / application-test.yml:
spring:
datasource:
driverClassName: org.h2.Driver
url: jdbc:h2:mem:testdb
username: sa
password:
并按照以下方式配置测试:
@RunWith(SpringRunner.class)
@SpringBootTest
@ActiveProfiles(profiles = "test")
public class SignupControllerTest {
@Autowired
private WebApplicationContext webApplicationContext;
private MockMvc mockMvc;
@Autowired
private RealityKeeperRepository myrepo;
如果您使用的是常规弹簧,则可以使用@Profile("test")
注释配置DataSource bean:
@Bean
@Profile("test")
public DataSource devDataSource() {
return new EmbeddedDatabaseBuilder()
.setType(EmbeddedDatabaseType.HSQL)
.build();
}
并配置测试,例如:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {AppConfig.class})
@ActiveProfiles(profiles = "test")
public class MyTest {
@Autowired
...
您的AppConfig类应使用@Configuration注释,其中包含上述的devDataSource bean。
答案 1 :(得分:0)
是的,如果您具有H2依赖性并且没有设置,那么Spring boot将为您启动嵌入式H2 DB。
本文应该有用:http://www.springboottutorial.com/spring-boot-and-h2-in-memory-database
答案 2 :(得分:0)
如果测试数据库连接,这里是旧的,但仍然很好blog on the topic。您也应该能够使用 TestContainers,以便更简单地创建数据库。
如果您只需要在某些确切的操作(例如存储库保存)上测试一些失败,您可以简单地模拟存储库以进行测试运行:
var mockedBean = Mockito.mock(MyRepository.class);
var originalBean = ReflectionTestUtils.getField(articleService, fieldName);
Mockito.when(mockedBean.save(Mockito.any(MyEntity.class))).thenThrow(new RuntimeException("My test exception"));
ReflectionTestUtils.setField(myService, fieldName, mockedBean);
...
// test here
...
// set bean back for other test cases
ReflectionTestUtils.setField(myService, fieldName, originalBean);