[01.29] 내일배움캠프[Spring] TIL-60

박상훈·2023년 1월 29일
0

내일배움캠프[TIL]

목록 보기
60/72

[01.29] 내일배움캠프[Spring] TIL-60

1. Controller TestCode

  • 사전 상식 : API요청을 Test하기 위해서 MockMvc객체의 선언 및 초기화가 필요하
    다.
 private MockMvc mockMvc;//Controller를 테스트하기 위한 객체
 
   @BeforeEach // 테스트 시작 전 호출하게 되는 메서드
    public void init(){
        //mockMvc객체를 초기화해주는 작업
        mockMvc = MockMvcBuilders.standaloneSetup(userController).build();
    }

회원 가입 성공 Test

@Test
    @DisplayName("회원가입 성공")
    void createUser() throws Exception {

        //given
        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));
        //when
        ResultActions resultActions = mockMvc.perform(
                        MockMvcRequestBuilders.post("/users/sign")
                                .contentType(MediaType.APPLICATION_JSON)
                                .content(new Gson().toJson(request))
                );

        //then
        assertThat(responseEntity).isEqualTo(responseEntity);
    }

회원가입 중 정규식 @Vaild 오류 Test

@Test
    @DisplayName("회원가입 실패(아이디)")
    void createUser_failed_id() throws Exception {

        //given
        SignupDto request = SignupDto.builder()
                .username("as")
                .password("asd123445!")
                .admin(false)
                .build();



        //when
        ResultActions resultActions = mockMvc.perform(
                MockMvcRequestBuilders.post("/users/sign")
                        .contentType(MediaType.APPLICATION_JSON)
                        .content(new Gson().toJson(request))
        );

        //then
        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() {

        //given
        User user = new User("sdad123","asd12345!", UserRoleEnum.CUSTOMER);

        Pageable pageable = PageRequest.of(1,5);

        //when
        User savedUser = userRepository.save(user);
        Page<User> foundUser = userRepository.findAllByRoleOrderByIdDesc(UserRoleEnum.CUSTOMER,pageable);
        //then
        assertThat(foundUser).isNotNull();
    }
    
     @Test
    void findByUsername() {

        //given
        User user = new User("sdad123","asd12345!", UserRoleEnum.CUSTOMER);
        //when
        User savedUser = userRepository.save(user);
        Optional<User> foundUser = userRepository.findByUsername(user.getUsername());
        //then

        assertThat(foundUser).isPresent();

    }
    
     @Test
    void addUser(){
        //given
        User user = new User("sdad123","asd12345!", UserRoleEnum.CUSTOMER);
        //when
        User savedUser = userRepository.save(user);
        //then

        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);

        //when
        User savedUser = userRepository.save(user);
        Page<UserContentsResponseDto> foundUser = userRepository.findAllByRoleOrderByIdDescQuery(UserRoleEnum.CUSTOMER,pageable);
        //then
        assertThat(foundUser).isNotNull();

    }
profile
기록하는 습관

0개의 댓글