2016-02-29 20 views
9

trạng:Làm thế nào tôi có thể giả lập kết nối db trong Spring Boot cho mục đích thử nghiệm?

  1. Tôi đang sử dụng Spring Cloud với Spring Boot trong một microservice, microservice rằng đang tải một thông tin cấu hình DB để cấu hình một kết nối.
  2. Tôi đã tạo một thử nghiệm để nhận các giao diện còn lại bằng cách sử dụng Swagger cho tài liệu.
  3. Tôi muốn tắt tải cấu hình DB vì không cần thiết.

Đây là mã:

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

Làm thế nào tôi có thể chạy thử nghiệm mà không cần nạp cấu hình cơ sở dữ liệu? Điều này có khả thi không?

+1

Giả lập lớp dịch vụ của bạn. Đơn giản như thế. –

Trả lời

10

Có một tùy chọn cho bean Spring giả chỉ với các tính năng đơn giản của Spring. Bạn cần sử dụng các chú thích @Primary, @Profile@ActiveProfiles cho chú thích đó.

I wrote a blog post on the topic.

Bạn có thể sử dụng trong bộ nhớ DB (ví dụ H2) để thay thế nguồn dữ liệu thực tế. Một cái gì đó như thế này:

@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(); 
    } 
} 
Các vấn đề liên quan