복붙노트

[SPRING] 테스트 목적으로 스프링 부트에서 db connection을 모의 (mock) 할 수 있습니까?

SPRING

테스트 목적으로 스프링 부트에서 db connection을 모의 (mock) 할 수 있습니까?

상태:

다음은 코드입니다.

@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. ==============================

    1.일반 Spring 기능을 사용하여 Spring bean을 위조하는 옵션이 있습니다. @Primary, @Profile 및 @ActiveProfiles 주석을 사용해야합니다.

    일반 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();
        }
    }
    
  2. from https://stackoverflow.com/questions/35707469/how-can-i-mock-db-connection-in-spring-boot-for-testing-purpose by cc-by-sa and MIT license