[Spring] 테스트 코드 만들기

림민지·2025년 4월 21일

Today I Learn

목록 보기
48/62

테스트 코드란 뭐고 언제 쓰면 좋은걸까?

🔎 테스트 코드란?

: 실제 코드가 정상적으로 동작하는지 검증하는 코드(기대한 대로)
➡️ 나중에 수정이나 리팩토링을 해도 기존 기능이 잘 유지되는지 확인할 수 있다!!

예시

만약 내가 비밀번호 암호화하는 메서드를 만들었는데, 이게 제대로 작동하는게 맞는지 검증하고 싶다!

그때 아래의 코드를 작성해볼 수 있따

PasswordEncoder encoder = new PasswordEncoder();
String encoded = encoder.encode("1234");
boolean result = encoder.matches("1234", encoded);

이 코드가 기대하는 결과는 result == true

근데 이걸 매번 직접 실행해서 눈으로 확인하면 너무 귀찮음,,,, 그리고 메모리 낭비도 심하고ㅜㅜ
➡️ 그래서 테스트 코드를 만들어 놓고, test 버튼만 누르면 자동으로 확인될 수 있게 만드는 것!!

우리가 코드를 짜는 곳은 main
테스트를 진행할 패키지는 바로 test이다~!

🌟 given-when-then 패턴

테스트코드를 작성할 때는, given-when-then 패턴을 준수하는 것이 중요하다!!
패턴으로 나눔으로써 개발자가 편리하게 확인할 수 있기 때문

given - 테스트 준비 : 입력값 설정, 객체 생성 등
when - 실제 실행 : 테스트 대상 메서드 호출
then - 결과 검증 : 예상한 값과 실제 결과 비교

@Test
void 테스트_이름() {
    // given
    // 준비물 만들기

    // when
    // 메서드 실행

    // then
    // 결과 검증
}

그럼 이 패턴을 활용해서 테스트 코드를 만들어보자


🔬 실습

실습으로 이해해보자!

초기 세팅

프로젝트에서 src/test 패키지 내부에서 만들면 된다. 우선 test 패키지로 이동!

테스트하고 싶은 클래스와 같은 패키지 구조를 만든다
main에 org.example.expert.config.PasswordEncoder가 있다면
테스트는 testorg.example.expert.config.PasswordEncoderTest로 만든다.

src
├── main
│   └── java
│       └── org
│           └── example
│               └── expert
│                   └── config
│                       └── PasswordEncoder.java
└── test
    └── java
        └── org
            └── example
                └── expert
                    └── config
                        └── PasswordEncoderTest.java  ← 여기에 만들기!

그리고 이제 클래스 내부에 코드를 만들어보자
@ExtendWith(SpringExtension.class) -> 나 스프링에서 이거 테스트 클래스다~~!!!
@InjectMocks 테스트할 대상을 주입해주기 (이름부터 주입한다 mock임)
@Test 그리고 테스트할 메서드 위에 나 이거 테스트코드아!!!라고 해주기

@ExtendWith(SpringExtension.class) //📢 스프링 환경에서 테스트할 거야!!라고 알려주는 어노테이션
class PasswordEncoderTest {

    @InjectMocks //  ✅ 테스트 대상 객체를 테스트 클래스에 주입(필요하면 mock도 함께 주입)
    private PasswordEncoder passwordEncoder; // ← 테스트할 대상!


    @Test
    void 테스트코드메서드명() {
        // given
        
        // when

        // then

    }
}

📌 given-when-then 구조로 테스트 작성하는거 잊지 말기!

그리고 마지막으로

  • 클래스 옆에 있는 ▶️ 버튼 클릭 → Run 'PasswordEncoderTest'
  • 메서드 옆 ▶️ 눌러서 특정 테스트만 실행도 가능

이렇게 실행해주면

이렇게 성공 뜨는걸 확인할 수 있다!


🐽 예시 코드

1. 비밀번호 검증하기

private PasswordEncoder passwordEncoder;이 객체가 잘 작동하는지 알아보자

1. given

        String rawPassword = "testPassword";
        String encodedPassword = passwordEncoder.encode(rawPassword);

환경을 주자
테스트할 rawPassword를 주고, 암호화해서 준비!

2. when

 boolean matches = passwordEncoder.matches(rawPassword, encodedPassword);

이거 일치하니? 라고 물어보기

3. then

assertTrue(matches);

assertTrue()란?

assertTrue(조건식);

➡️ 말 그대로 "이 조건이 참(true)이길 기대한다!" 라는 뜻

테스트 결과로 true가 나와야 테스트가 성공하고,
false가 나오면 테스트가 실패

=> 테스트코드에서 많이 쓰인다

🔮 테스트코드 주요 메서드

메서드설명
assertTrue(조건)조건이 true면 테스트 통과
assertFalse(조건)조건이 false면 테스트 통과
assertEquals(a, b)a와 b가 같아야 테스트 통과
assertNotNull(객체)객체가 null이 아니어야 통과
profile
@lim_128

0개의 댓글