Spring Boot에서 테스트 목적으로 DB 연결을 모의 실행하려면 어떻게 해야 합니까?
상황:
- 사용 중
Spring Cloud와 함께Spring Boot마이크로서비스에서 해당 마이크로서비스는 연결을 구성하기 위해 DB 구성 정보를 로드하는 것입니다. - 다른 인터페이스를 얻기 위해 테스트를 만들었습니다.
Swagger문서화하기 위해 - DB 구성 로드가 필요하지 않으므로 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());
}
}
데이터베이스 구성을 로드하지 않고 테스트를 실행하려면 어떻게 해야 합니까?이것이 가능합니까?
평범한 스프링 기능만으로 가짜 스프링 빈을 만들 수 있는 옵션이 있습니다.사용해야 합니다.@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();
}
}
언급URL : https://stackoverflow.com/questions/35707469/how-can-i-mock-db-connection-in-spring-boot-for-testing-purpose
'programing' 카테고리의 다른 글
| 폴더의 모든 파일을 여는 방법 (0) | 2023.07.08 |
|---|---|
| PLSQL 하위 쿼리 및 반환 절을 사용하여 에 삽입 (0) | 2023.07.08 |
| 문서 집합에 대한 각 값의 발생 횟수를 몽고 카운트 (0) | 2023.07.08 |
| SQL 스크립트 하나로 하위 및 상위 행 삭제 (0) | 2023.07.08 |
| MariaDB 10.3에서 행을 열로 동적 변환 (0) | 2023.07.08 |