테스트 코드

우정·2023년 1월 27일
0

[내일배움캠프] TIL

목록 보기
43/50

테스트 코드

  • JUnit의 생명 주기

    • @BeforeAll : 테스트를 시작하기 전에 (한 번) 호출되는 메서드
    • @BeforeEach : 각 테스트 메서드가 실행되기 전에 동작하는 메서드
    • @AfterAll : 테스트를 종료하면서 (한 번) 호출되는 메서드
    • @AfterEach : 각 테스트 메서드가 종료되면서 호출되는 메서드
  • UserControllerTest

@ExtendWith(MockitoExtension.class)
class UserControllerTest {

    @Mock
    private UserService userService;

    @InjectMocks
    private UserController userController;

    private MockMvc mockMvc;

    @BeforeEach
    public void init() {
        mockMvc = MockMvcBuilders.standaloneSetup(userController).build();
    }

    @Test
    @DisplayName("회원가입 (성공)")
    void signup() throws Exception {
        // given
        SignupRequest request = SignupRequest.builder()
                .admin(false)
                .username("nathan")
                .password("1234qwer")
                .email("nathan@gmail.com")
                .build();

        ResponseStatusDto response = new ResponseStatusDto(StatusEnum.SIGN_SUCCESS);

        when(userService.signup(any(SignupRequest.class)))
                .thenReturn(response);

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

        // then
        resultActions.andExpect(status().isOk())
                .andExpect(jsonPath("statusCode", response.getStatusCode()).exists())
                .andExpect(jsonPath("msg", response.getMsg()).exists());
    }

    @Test
    @DisplayName("회원가입 (실패) - 아이디")
    void signup_failed_id() throws Exception {
        // given
        SignupRequest request = SignupRequest.builder()
                .admin(false)
                .username("nat")
                .password("1234qwer")
                .email("nathan@gmail.com")
                .build();

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

        // then
        resultActions.andExpect(status().isBadRequest());
    }

    @Test
    @DisplayName("회원가입 (실패) - 비밀번호")
    void signup_failed_pw() throws Exception {
        // given
        SignupRequest request = SignupRequest.builder()
                .admin(false)
                .username("nathan")
                .password("1234qwe")
                .email("nathan@gmail.com")
                .build();

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

        // then
        resultActions.andExpect(status().isBadRequest());
    }

    @Test
    void login() {
    }
}
  • UserRepositoryTest
@DataJpaTest
class UserRepositoryTest {

    @Autowired
    private UserRepository userRepository;

    @Test
    @DisplayName("사용자 추가")
    void addUser() {
        // given
        User user = new User(
                "nathan",
                "1234qwer",
                "nathan@gmail.com",
                UserRoleEnum.USER
        );

        // when
        User savedUser = userRepository.save(user);

        // then
        assertThat(savedUser.getUsername()).isEqualTo(user.getUsername());
    }

    @DisplayName("사용자 조회")
    @Test
    void findByUsername() {
        // given
        User user = new User(
                "nathan",
                "1234qwer",
                "nathan@gmail.com",
                UserRoleEnum.USER
        );

        userRepository.save(user);

        // when
        Optional<User> savedUser = userRepository.findByUsername(user.getUsername());

        // then
        assertThat(savedUser).isPresent();
    }
}

0개의 댓글

관련 채용 정보