로그인 테스트 구현 > 스프링 부트

본문 바로가기

[개발] 로그인 테스트 구현

필기자
2022-11-01 12:09 5,840 0

본문

pom.xml



        <!--security-test 의존성 추가-->
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-test</artifactId>
            <scope>test</scope>
            <version>${spring-security.version}</version>
        </dependency>
        <!--security-test 의존성 추가-->

 

alt + 엔터 > Create Test

20221101114842_58c21c62e2e6f71b42558e4bc6ecc1e2_ja0n.png

 

20221101114936_58c21c62e2e6f71b42558e4bc6ecc1e2_8lmz.png

 



@SpringBootTest
@AutoConfigureMockMvc
@Transactional
@TestPropertySource(locations="classpath:application-test.properties")
class MemberControllerTest {
    @Autowired
    private MemberService memberService;

    @Autowired
    private MockMvc mockMvc;

    @Autowired
    PasswordEncoder passwordEncoder;

    public Member createMember(String email, String password){
        MemberFormDto memberFormDto = new MemberFormDto();
        memberFormDto.setEmail(email);
        memberFormDto.setName("홍길동");
        memberFormDto.setAddress("서울시 마포구 합정동");
        memberFormDto.setPassword(password);
        Member member = Member.createMember(memberFormDto, passwordEncoder);
        return memberService.saveMember(member);
    }

    @Test
    @DisplayName("로그인 성공 테스트")
    public void loginSuccessTest() throws Exception{
        String email = "test@email.com";
        String password = "1234";
        this.createMember(email, password);
        mockMvc.perform(formLogin().userParameter("email")
                        .loginProcessingUrl("/members/login")
                        .user(email).password(password))
                .andExpect(SecurityMockMvcResultMatchers.authenticated());
    }

    @Test
    @DisplayName("로그인 실패 테스트")
    public void loginFailTest() throws Exception{
        String email = "test@email.com";
        String password = "1234";
        this.createMember(email, password);
        mockMvc.perform(formLogin().userParameter("email")
                        .loginProcessingUrl("/members/login")
                        .user(email).password("12345"))
                .andExpect(SecurityMockMvcResultMatchers.unauthenticated());
    }
}

 

트랜잭션 (@Transactional : 선언적 트랜젝션)

  1. 데이터베이스의 상태를 변경하는 작업 또는 한번에 수행되어야 하는 연산들.
  2. begin, commit 을 자동으로 수행.
  3. 예외 발생 시 rollback 처리를 자동으로 수행.

- 원자성(Atomicity)
  한 트랜잭션 내에서 실행한 작업들은 하나의 단위로 처리함. 모두 성공 또는 모두 실패.
- 일관성(Consistency)
  트랜잭션은 일관성 있는 데이타베이스 상태를 유지함. (data integrity 만족 등등)
- 격리성(Isolation)
  동시에 실행되는 트랜잭션들이 서로 영향을 미치지 않도록 격리됨.
- 영속성(Durability)
  트랜잭션을 성공적으로 마치면 결과가 항상 저장됨.

 

20221101115750_58c21c62e2e6f71b42558e4bc6ecc1e2_8wc6.png

 

결과 : 로그인 성공

 

20221101120843_58c21c62e2e6f71b42558e4bc6ecc1e2_521b.png

 

결과 : 로그인 실패

 

20221101122820_58c21c62e2e6f71b42558e4bc6ecc1e2_gc6a.png

댓글목록0

등록된 댓글이 없습니다.
게시판 전체검색