我有一个小应用程序,在实时,建立数据库连接,并存储和保留一些数据。
我目前处于尝试编写测试的中间位置,我想完全切断应用程序的数据库部分,并在测试中模拟它。
使用配置类设置数据源。
@Component
@Configuration
public class DataSourceConfiguration {
@Bean
public DataSource myDataSource() { ... }
}
和目前看起来类似于
的测试boostrap@RunWith(SpringRunner.class)
@EnableAutoConfiguration(exclude = {
DataSourceAutoConfiguration.class,
DataSourceTransactionManagerAutoConfiguration.class,
HibernateJpaAutoConfiguration.class
})
public class MyTest {
}
运行测试时,我可以看到Spring正在尝试实例化Hibernate,以及与db的连接,我假设因为我的配置类。我怎么能阻止Spring这样做?
答案 0 :(得分:0)
无需使用:@EnableAutoConfiguration
我们可以使用@WebMvcTest将测试范围缩小到网络层,如下所示
@RunWith(SpringRunner.class)
@WebMvcTest
public class WebLayerTest {
@Autowired
private MockMvc mockMvc;
@Test
public void shouldReturnDefaultMessage() throws Exception {
this.mockMvc.perform(get("/")).andDo(print()).andExpect(status().isOk())
.andExpect(content().string(containsString("Hello World")));
}
}
参考如何仅使用web或使用完整的应用程序上下文加载来测试弹簧应用程序:https://spring.io/guides/gs/testing-web/
参考模拟示例:http://www.lucassaldanha.com/unit-and-integration-tests-in-spring-boot/