JUnit Assertion 자동 검증 메서드

심진주·2025년 2월 17일
post-thumbnail

JUnit 단언(Assertion)으로 자동화 테스트하기 🎯

✅ JUnit Assertion이란?

  • JUnit에서 제공하는 자동 검증 메서드로, 테스트가 기대한 대로 동작하는지 확인할 수 있다.
  • 이전에는 log.debug()로 직접 결과를 확인했지만, assert를 활용하면 테스트를 자동화할 수 있다.

🔹 주요 Assertion 메서드 정리

1. assertNotNull(객체)

  • 객체가 null이 아니어야 테스트 성공
  • 예제:
    Member output = memberService.getItem(input);
    assertNotNull(output); // output이 null이면 테스트 실패!
  • 왜 필요할까?
    • 데이터베이스에서 selectItem()을 실행했는데 null이면 문제가 있는 것이다!

2. assertEquals(기대값, 실제값)

  • 기대값과 실제값이 같아야 테스트 성공
  • 예제:
    assertEquals("박지민 (수정)", output.getUserName());
  • 왜 필요할까?
    • 수정 후 userName이 정상적으로 업데이트되었는지 검증 가능!

3. assertFalse(조건식) / assertTrue(조건식)

  • assertFalse(조건식): 조건이 false여야 테스트 성공
  • assertTrue(조건식): 조건이 true여야 테스트 성공
  • 예제:
    List<Member> output = memberService.getList(null);
    assertFalse(output.isEmpty());  // 리스트가 비어있으면 테스트 실패!
  • 왜 필요할까?
    • 회원 목록을 조회했는데 비어있다면 데이터가 잘못된 것일 수 있다.

✅ JUnit Assertion을 써야 하는 이유

자동 검증:

  • if(output != null) { System.out.println("테스트 성공!"); } 같은 코드 없이 자동 체크!
    테스트 실패 시 오류 추적 가능:
  • assertNotNull(output);에서 outputnull이면 바로 오류 발생
    테스트 리포트 제공:
  • JUnit이 assert를 기반으로 테스트 결과를 명확하게 보여줌

🔍 예전 방식 vs JUnit 방식 비교

👀 예전 방식 (로그 확인)

Member output = memberService.getItem(input);
log.debug("조회된 회원: {}", output);
  • 결과를 눈으로 확인해야 함.

JUnit 방식 (자동 검증)

Member output = memberService.getItem(input);
assertNotNull(output);
  • outputnull이면 테스트가 자동으로 실패함! 🚀

🖥️ 실제 코드 변화

수정 전 MemberMapperTest.java

package kr.project.yuju.mappers;

import java.util.List;

import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import kr.project.yuju.models.Member;
import lombok.extern.slf4j.Slf4j;

@Slf4j
@SpringBootTest
public class MemberMapperTest {
    
    @Autowired
    private MemberMapper memberMapper;

    @Test
    @DisplayName("회원 추가 테스트")
    void insertMember() {
        Member input = new Member();
        input.setUserName("최지나");
        input.setUserId("jina.choi@test.com");
        input.setUserPw("pass123!");
        input.setAdmin("N");
        
        int output = memberMapper.insert(input);
        
        log.debug("output: {}", output);
        log.debug("new id: {}", input.getMemberId());
    }

    @Test
    @DisplayName("회원 수정 테스트")
    void updateMember() {
        Member input = new Member();
        input.setMemberId(2);
        input.setUserName("최지나 (수정)");
        input.setUserPw("newPass123!");
        input.setAdmin("N");
        
        int output = memberMapper.update(input);
        log.debug("output: {}", output);
    }

    @Test
    @DisplayName("회원 삭제 테스트")
    void deleteMember() {
        Member input = new Member();
        input.setMemberId(2);
        
        int output = memberMapper.delete(input);
        log.debug("output: {}", output);
    }

    @Test
    @DisplayName("하나의 회원 조회 테스트")
    void selectOneMember() {
        Member input = new Member();
        input.setMemberId(2);
        
        Member output = memberMapper.selectItem(input);
        log.debug("output: {}", output);
    }

    @Test
    @DisplayName("회원 목록 조회 테스트")
    void selectListMember() {
        List<Member> output = memberMapper.selectList(null);
        
        for (Member item : output) {
            log.debug("output: {}", item);
        }
    }
    
    @Test
    @DisplayName("회원 수 조회 테스트")
    void selectCountMember() {
        int output = memberMapper.selectCount(null);
        log.debug("회원 수: {}", output);
    }
}

수정 후 MemberMapperTest.java

package kr.project.yuju.mappers;

import static org.junit.jupiter.api.Assertions.*;

import java.util.List;

import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import kr.project.yuju.models.Member;
import lombok.extern.slf4j.Slf4j;

@Slf4j
@SpringBootTest
public class MemberMapperTest {
    
    @Autowired
    private MemberMapper memberMapper;

    @Test
    @DisplayName("회원 추가 테스트")
    void insertMember() {
        Member input = new Member();
        input.setUserName("이수아");
        input.setUserId("sua.lee@test.com");
        input.setUserPw("pass123!");
        input.setAdmin("N");
        
        int output = memberMapper.insert(input);
        assertTrue(output > 0);
        assertNotNull(input.getMemberId());
        
        log.debug("output: {}", output);
        log.debug("new id: {}", input.getMemberId());
    }

    @Test
    @DisplayName("회원 수정 테스트")
    void updateMember() {
        Member input = new Member();
        input.setMemberId(4);
        input.setUserName("이수아 (수정)");
        input.setUserPw("newPass123!");
        input.setAdmin("N");
        
        int output = memberMapper.update(input);
        assertTrue(output > 0);
        log.debug("output: {}", output);
    }

    @Test
    @DisplayName("회원 삭제 테스트")
    void deleteMember() {
        Member input = new Member();
        input.setMemberId(2);
        
        int output = memberMapper.delete(input);
        assertTrue(output > 0);
        log.debug("output: {}", output);
    }

    @Test
    @DisplayName("회원 단일 조회 테스트")
    void selectOneMember() {
        Member input = new Member();
        input.setMemberId(4);
        
        Member output = memberMapper.selectItem(input);
        assertNotNull(output);
        log.debug("output: {}", output);
    }

    @Test
    @DisplayName("회원 목록 조회 테스트")
    void selectListMember() {
        List<Member> output = memberMapper.selectList(null);
        assertNotNull(output);
        assertFalse(output.isEmpty());
        
        for (Member item : output) {
            log.debug("output: {}", item);
        }
    }
    
    @Test
    @DisplayName("회원 수 조회 테스트")
    void selectCountMember() {
        int output = memberMapper.selectCount(null);
        assertTrue(output >= 0);
        log.debug("회원 수: {}", output);
    }
}

🔥 결론

👉 JUnit의 assertNotNull, assertEquals, assertFalse 같은 Assertion 메서드를 사용하면 테스트 자동화가 가능하다!
👉 로그를 일일이 확인할 필요 없이 더 안정적이고 효율적인 테스트가 가능하다! 🚀

JUnit Assertion을 활용해서, 자동화된 테스트 환경을 만들 수 있다! 🎉

0개의 댓글