2016-02-29 26 views
9

Situazione:Come posso simulare la connessione db in Spring Boot a scopo di test?

  1. Sto usando Spring Cloud con Spring Boot in una Microservice, che Microservice sta caricando un DB informazioni di configurazione per configurare una connessione.
  2. Ho creato un test per ottenere le restanti interfacce utilizzando Swagger per la documentazione.
  3. Voglio disabilitare il caricamento della configurazione del DB perché non è necessario.

Ecco il codice:

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

Come posso eseguire il test senza caricare la configurazione del database? È possibile?

+1

Mock il tuo livello di servizio. Semplice come quella. –

risposta

10

C'è un'opzione per fingere il fagiolo di primavera con le caratteristiche semplici della molla. È necessario utilizzare le annotazioni @Primary, @Profile e @ActiveProfiles per questo.

I wrote a blog post on the topic.

È possibile utilizzare in memoria DB (ad esempio H2) per sostituire fonte di dati reali. Qualcosa del genere:

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