状況:
Spring Cloud
with Spring Boot
マイクロサービスでは、そのマイクロサービスは接続を構成するためにDB構成情報をロードしています。Swagger
を使用して、残りのインターフェイスを取得するテストを作成しました。コードは次のとおりです。
@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());
}
}
データベース構成をロードせずにテストを実行するにはどうすればよいですか?これは可能ですか?
Springの単純な機能だけでSpring Beanを偽造するオプションがあります。 @Primary
、@Profile
および@ActiveProfiles
注釈を使用する必要があります。
メモリDB(H2など)で使用して、実際のデータソースを置き換えることができます。このようなもの:
@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();
}
}