2016-02-29 7 views
9

Sytuacja:Jak można symulować połączenie db w Spring Boot do celów testowych?

  1. Używam Spring Cloud z Spring Boot w microservice, że microservice ładuje DB config informacji, aby skonfigurować połączenie.
  2. Utworzono test, aby uzyskać pozostałe interfejsy do dokumentacji za pomocą Swagger.
  3. Chcę wyłączyć ładowanie konfiguracji bazy danych, ponieważ nie jest to konieczne.

Oto kod:

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

Jak mogę uruchomić test bez ładowania konfiguracji bazy danych? Czy to możliwe?

+1

Makiety warstwę usług. Proste. –

Odpowiedz

10

Istnieje opcja podrabiania Spring bean za pomocą prostych funkcji Spring. Musisz użyć adnotacji o numerach: @Primary, @Profile i @ActiveProfiles.

I wrote a blog post on the topic.

może użyć pamięci DB (na przykład H2) w celu zastąpienia rzeczywistego źródła danych. Coś w tym stylu:

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