web-dev-qa-db-fra.com

Comment puis-je simuler la connexion db dans Spring Boot à des fins de test?

Situation:

  1. J'utilise Spring Cloud avec Spring Boot dans un microservice, ce microservice charge une information de configuration de base de données pour configurer une connexion.
  2. J'ai créé un test pour obtenir les autres interfaces en utilisant Swagger pour la documentation.
  3. Je veux désactiver le chargement de la configuration DB car ce n'est pas nécessaire.

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?

14
Rys

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();
    }
}
17
luboskrnac