How can I mock db connection in Spring Boot for testing purpose?
31,602
There is an option to fake Spring bean with just plain Spring features. You need to use @Primary
, @Profile
and @ActiveProfiles
annotations for it.
I wrote a blog post on the topic.
You can use in memory DB (e.g. H2) to replace real data source. Something like this:
@Configuration
public class TestingDataSourceConfig {
@Bean
@Primary
public DataSource dataSource() {
return new EmbeddedDatabaseBuilder()
.generateUniqueName(true)
.setType(H2)
.setScriptEncoding("UTF-8")
.ignoreFailedDrops(true)
.addScript("schema.sql")
.addScripts("user_data.sql", "country_data.sql")
.build();
}
}
Author by
Rys
Updated on July 19, 2022Comments
-
Rys almost 2 years
Situation:
- I am using
Spring Cloud
withSpring Boot
in a microservice, that microservice is loading a DB config information to configure a connection. - I created a test to get the rest interfaces using
Swagger
for documentation. - I want to disable the loading of DB configuration because is not necessary.
Here is the code:
@WebAppConfiguration @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = {Application.class, Swagger2MarkupTest.class}, loader = SpringApplicationContextLoader.class) @ActiveProfiles("test") public class Swagger2MarkupTest { @Autowired private WebApplicationContext context; private MockMvc mockMvc; @Autowired protected Environment env; @Before public void setUp() { this.mockMvc = MockMvcBuilders.webAppContextSetup(this.context).build(); } @Test public void convertSwaggerToAsciiDoc() throws Exception { this.mockMvc.perform(get("/v2/api-docs").accept(MediaType.APPLICATION_JSON)) .andDo(Swagger2MarkupResultHandler.outputDirectory("target/docs/asciidoc/generated") .withExamples("target/docs/asciidoc/generated/exampless").build()) .andExpect(status().isOk()); } }
How can I run the test without loading the database configuration? Is this possible?
- I am using
-
deadbug over 4 yearsFrom the blog : As of Spring Boot 1.4.0, faking of Spring Beans is supported natively via annotation @MockBean. Read Spring Boot docs for more info.