programing

Spring Boot에서 테스트 목적으로 DB 연결을 모의 실행하려면 어떻게 해야 합니까?

javajsp 2023. 7. 8. 10:36

Spring Boot에서 테스트 목적으로 DB 연결을 모의 실행하려면 어떻게 해야 합니까?

상황:

  1. 사용 중Spring Cloud와 함께Spring Boot마이크로서비스에서 해당 마이크로서비스는 연결을 구성하기 위해 DB 구성 정보를 로드하는 것입니다.
  2. 다른 인터페이스를 얻기 위해 테스트를 만들었습니다.Swagger문서화하기 위해
  3. 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