[01.29] 내일배움캠프[Spring] TIL-60
1. Controller TestCode
- 사전 상식 : API요청을 Test하기 위해서
MockMvc
객체의 선언 및 초기화가 필요하
다.
private MockMvc mockMvc;
@BeforeEach
public void init(){
mockMvc = MockMvcBuilders.standaloneSetup(userController).build();
}
회원 가입 성공 Test
@Test
@DisplayName("회원가입 성공")
void createUser() throws Exception {
SignupDto request = SignupDto.builder()
.username("asd1234")
.password("asd123445!")
.admin(false)
.build();
given(userService.signup(request)).willReturn("회원가입 성공");
ResponseEntity responseEntity = ResponseEntity.status(HttpStatus.CREATED).body(userService.signup(request));
ResultActions resultActions = mockMvc.perform(
MockMvcRequestBuilders.post("/users/sign")
.contentType(MediaType.APPLICATION_JSON)
.content(new Gson().toJson(request))
);
assertThat(responseEntity).isEqualTo(responseEntity);
}
회원가입 중 정규식 @Vaild 오류 Test
@Test
@DisplayName("회원가입 실패(아이디)")
void createUser_failed_id() throws Exception {
SignupDto request = SignupDto.builder()
.username("as")
.password("asd123445!")
.admin(false)
.build();
ResultActions resultActions = mockMvc.perform(
MockMvcRequestBuilders.post("/users/sign")
.contentType(MediaType.APPLICATION_JSON)
.content(new Gson().toJson(request))
);
resultActions.andExpect(status().isBadRequest());
}
2. Repository TestCode
- 사전 작업 :
@DataJpaTest
의 class 과 해당 Repository의 @Autowired
가 필요하다.
- Test결과 진짜 쿼리문이 날아가는 것을 보니, 진짜 DB로 테스트를 하는 것 같다.

@DataJpaTest
class UserRepositoryTest {
@Autowired
private UserRepository userRepository;
}
JPQL을 쓰지 않는 기본 JPA쿼리 테스트
@Test
void findAllByRoleOrderByIdDesc() {
User user = new User("sdad123","asd12345!", UserRoleEnum.CUSTOMER);
Pageable pageable = PageRequest.of(1,5);
User savedUser = userRepository.save(user);
Page<User> foundUser = userRepository.findAllByRoleOrderByIdDesc(UserRoleEnum.CUSTOMER,pageable);
assertThat(foundUser).isNotNull();
}
@Test
void findByUsername() {
User user = new User("sdad123","asd12345!", UserRoleEnum.CUSTOMER);
User savedUser = userRepository.save(user);
Optional<User> foundUser = userRepository.findByUsername(user.getUsername());
assertThat(foundUser).isPresent();
}
@Test
void addUser(){
User user = new User("sdad123","asd12345!", UserRoleEnum.CUSTOMER);
User savedUser = userRepository.save(user);
assertThat(savedUser).isEqualTo(user);
}
JPQL문이 들어간 쿼리 테스트하기
@Query("select new com.sparta.morningworkout.dto.admin.UserContentsResponseDto(u.username, p.nickname) " +
"from users u left join Profile p on u.id = p.id where u.role = :role")
Page<UserContentsResponseDto> findAllByRoleOrderByIdDescQuery(@Param("role") UserRoleEnum role, Pageable pageable);
@Test
void findAllByRoleOrderByIdDescQuery() {
User user = new User("sdad123","asd12345!", UserRoleEnum.CUSTOMER);
Pageable pageable = PageRequest.of(1,5);
User savedUser = userRepository.save(user);
Page<UserContentsResponseDto> foundUser = userRepository.findAllByRoleOrderByIdDescQuery(UserRoleEnum.CUSTOMER,pageable);
assertThat(foundUser).isNotNull();
}