Situation:
Spring Cloud
avec Spring Boot
dans un microservice, ce microservice charge une information de configuration de base de données pour configurer une connexion.Swagger
pour la documentation.Voici le 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());
}
}
Comment puis-je exécuter le test sans charger la configuration de la base de données? Est-ce possible?
Il existe une option pour simuler le haricot de printemps avec des fonctionnalités de printemps simples. Vous devez utiliser @Primary
, @Profile
et @ActiveProfiles
annotations pour cela.
J'ai écrit un article de blog sur le sujet.
Vous pouvez utiliser en mémoire DB (par exemple H2) pour remplacer la source de données réelle. Quelque chose comme ça:
@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();
}
}