Back End/Spring Boot

[Spring] JUnit API 테스트 코드 작성 (MockMvc)

DevPing9_ 2021. 11. 30. 21:14

* MockMvc 는 API 컨트롤러를 테스트하기 위한 도구이다.

 

 

# 주의사항

  •  MockMvc 를 주입하려면 @AutoConfigureMockMvc 어노테이션이 필요하다.

 

 

# 회원가입과 로그인 API 를 테스트하기 위한 테스트 코드

@SpringBootTest
@Slf4j
@AutoConfigureMockMvc
public class LoginApiTest {
    @Autowired
    private UserRepository userRepository;
    @Autowired
    private MockMvc mockMvc;
    @Autowired
    private ObjectMapper objectMapper;

    @Test
    @DisplayName("SignUp & Login Test")
    public void AccountTest() throws Exception{

        String signUpUrl = "/api/sign-up";
        String loginUrl = "/api/login";
        
        objectMapper= Jackson2ObjectMapperBuilder.json()
                .featuresToDisable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)
                .modules(new JavaTimeModule())
                .build();
        
        SignUpReq signUpReq = UserDto.SignUpReq.builder()
                            .id("newUser")
                            .pw("1234")
                            .email("daniel@naver.com")
                            .build();

        String content = objectMapper.writeValueAsString(signUpReq);
        log.info(content);

        System.out.println("# 회원가입 테스트");
        mockMvc
        .perform(MockMvcRequestBuilders.post(signUpUrl)
        .content(content)
        .contentType(MediaType.APPLICATION_JSON))
        .andExpect( result -> {
            MockHttpServletResponse response = result.getResponse();
            log.info(response.getContentAsString());
        });
        
        System.out.println("# 회원가입 후 DB 확인");
        userRepository.findAll().forEach(System.out::println);
        
        LoginReq loginReq = UserDto.LoginReq.builder().id("newUser").pw("1234").build();
        content = objectMapper.writeValueAsString(loginReq);
        log.info("#loginReq : {}",content);

        
        System.out.println("# 로그인 테스트");
        mockMvc
        .perform(MockMvcRequestBuilders.post(loginUrl)
        .content(content)
        .contentType(MediaType.APPLICATION_JSON))
        .andExpect(MockMvcResultMatchers.status().isOk())
        .andExpect(MockMvcResultMatchers.content().string("true"));
        
    }
 }
728x90