Spring,SpringBoot

test 환경 분리하기, 폼 객체 mock mvc 테스트 방법

Lahezy 2023. 3. 30.
728x90

테스트 데이터 베이스와 서버 데이터 베이스 나누기

중복되는 필드가 있거나, 모든 포스트 확인 등을 테스트 하기 어려워서 분리하기로 했다.

test 환경 분리하기, 폼 객체 mock mvc 테스트 방법 - undefined - undefined - 테스트 데이터 베이스와 서버 데이터 베이스 나누기test 환경 분리하기, 폼 객체 mock mvc 테스트 방법 - undefined - undefined - 테스트 데이터 베이스와 서버 데이터 베이스 나누기

 

application.properties

#테스트용 데이터 베이스와 분리
spring.profiles.default=local

application-local.properties

spring.config.activate.on-profile=local

spring.jpa.generate-ddl=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.datasource.url=jdbc:mariadb://localhost:3306/cummu
spring.datasource.username={}
spring.datasource.password={}
/ ~~~~  기존에 있던 코드들/

application-test.properties

spring.config.activate.on-profile=test

spring.jpa.generate-ddl=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.datasource.url=jdbc:mariadb://localhost:3306/cummutest
spring.datasource.username={}
spring.datasource.password={}
/ ~~~~  기존에 있던 코드들/

그리고 테스트 코드 위에 프로파일 설정을 하면 된다.

test 환경 분리하기, 폼 객체 mock mvc 테스트 방법 - undefined - undefined - 테스트 데이터 베이스와 서버 데이터 베이스 나누기

원래는 테스트인 경우 해당 위치에 리소스에. yml이나. properties를 넣으면 알아서 인메모리로(h2데이터 베이스) 동작한다는데 안 돼서 그냥 위에 처럼 했다..  (h2데이터 베이스 의존성은 gradle에서 설정해 줘야 알아서 돌아간다)

 

[참고]

https://devlog-wjdrbs96.tistory.com/343

https://wildeveloperetrain.tistory.com/8

https://velog.io/@stbpiza/Spring-Boot-%ED%99%98%EA%B2%BD-%EB%B6%84%EB%A6%AC%ED%95%98%EA%B8%B0

 

2. 테스트 서버 성공! 근데 이제 폼객체 테스트는 어떻게 하는거지 

@Test
public void 유저객체생성확인() throws Exception {
    //이름에 넘길 파라미터 네임
    MockMultipartFile file = new MockMultipartFile("profileImg", "image.jpg", "image/jpeg", "<<jeg data>>".getBytes(StandardCharsets.UTF_8));
    MemberRequestDto userMakeDto = new MemberRequestDto("password", "loginId", "nick", "bo@google.com", file);

    //when
    mockMvc.perform(multipart("/auth/signup") //멀티 파트로 보내고
                    .file(file) //파일 넣기 
                    .param("password",userMakeDto.getPassword())
                    .param("loginId",userMakeDto.getLoginId())
                    .param("nickname",userMakeDto.getNickname())
                    .param("email",userMakeDto.getEmail())
            )
            .andExpect(status().isOk())
            .andExpect(jsonPath("loginId").value("loginId"))
            .andExpect(jsonPath("nickname").value("nick"))
            .andExpect(jsonPath("email").value("bo@google.com"));
    //then
    Member find = memberService.findByNickname("nick");
    assertTrue(passwordEncoder.matches("password", find.getPassword()));
    assertThat(find.getLoginId()).isEqualTo("loginId");
}

위에 처럼 하면 된다. 

file(file)부분에서 , MockMultipartFile("파라미터이름" ~~~) 형식으로 넣어서 테스트한다.

 

 

728x90

댓글