2016-02-29 12 views
9

状況:テスト目的でSpringブートでDB接続をモックできますか?

  1. 私はmicroserviceにSpring BootSpring Cloudを使用していますが、そのmicroserviceは、接続を設定するには、DB設定情報をロードしています。
  2. ドキュメント用にSwaggerを使用して残りのインターフェイスを取得するテストを作成しました。
  3. DB構成の読み込みを無効にする必要はないので、この設定を無効にします。ここで

コードです:

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

はどのようにして、データベースの設定をロードせずにテストを実行できますか? これは可能ですか?

+1

サービス層をモックします。そのような単純な。 –

答えて

10

プレーンなSpring機能だけで、Spring Beanを偽造するオプションがあります。そのためには@Primary,@Profileおよび@ActiveProfiles注釈を使用する必要があります。あなたは、実際のデータソースを置き換えるためにメモリDB(例えばH2)で使用することができます

I wrote a blog post on the topic.

。このようなもの:

@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(); 
    } 
} 
関連する問題