반응형
Notice
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
Tags
- 딥러닝
- 클라우드컴퓨팅
- Yes
- 알고리즘
- 머신러닝
- 프로그래밍
- 보안
- 버전관리
- 디자인패턴
- 데이터분석
- 빅데이터
- 소프트웨어공학
- 프로그래밍언어
- 데이터구조
- 소프트웨어
- 데이터베이스
- 사이버보안
- 컴퓨터비전
- 컴퓨터공학
- 컴퓨터과학
- 데이터과학
- 파이썬
- springboot
- 웹개발
- 네트워크
- 자료구조
- 자바스크립트
- I'm Sorry
- 네트워크보안
- 인공지능
Archives
- Today
- Total
스택큐힙리스트
JUnit5로 BankAccount 단위 테스트 작성법 본문
반응형
목표 🔑
- JUnit Jupiter(JUnit5) 환경 세팅 & 핵심 어노테이션 이해
- BankAccount 클래스에 대한 단위 테스트 설계·구현
- 예외 테스트로 입·출금 로직 신뢰도 높이기
- assertAll·@Nested 등 실무에서 자주 쓰는 기능 체득
1. JUnit5 빠른 셋업
// build.gradle
testImplementation("org.junit.jupiter:junit-jupiter:5.11.0")
- Gradle은 junit-jupiter 의존성 한 줄이면 끝.
- Maven은 <artifactId>junit-jupiter-engine</artifactId> 사용.
- IDE에서 “Run Tests”만 눌러도 자동으로 JUnit Platform이 실행된다.
2. 테스트 클래스 기본 골격
@DisplayName("BankAccount 단위 테스트")
class BankAccountTest {
BankAccount account;
@BeforeEach
void setUp() {
account = new BankAccount("철수", 100_000);
}
@Test
@DisplayName("정상 입금")
void depositSuccess() {
account.deposit(50_000);
assertEquals(150_000, account.getBalance());
}
}
- @BeforeEach : 테스트마다 초기 상태를 보장.
- @DisplayName : 레포트에 한글 시나리오 그대로 노출 → 가독성 ↑
- assertEquals : 예상값·실제값 비교.
3. 시나리오 설계 ✍️
- 정상 입금 → 잔액 증가 확인
- 정상 출금 → 잔액 감소 확인
- 잔액 초과 출금 시 예외 → IllegalStateException 던짐
- 0원 이하 입금 시 예외 → IllegalArgumentException 던짐
- 중복 검증 → assertAll 로 한 번에 결과 집계
4. 예외·복합 검증 코드
@Nested
@DisplayName("예외 상황")
class Exceptions {
@Test
@DisplayName("잔액 초과 출금은 불가")
void withdrawOverBalance() {
Throwable ex = assertThrows(IllegalStateException.class,
() -> account.withdraw(200_000));
assertEquals("잔액 부족", ex.getMessage());
}
@Test
@DisplayName("0 이하 금액 입금은 불가")
void depositInvalidAmount() {
assertThrows(IllegalArgumentException.class,
() -> account.deposit(0));
}
}
@Test
@DisplayName("여러 검증을 한 번에")
void multipleAssertions() {
account.deposit(10_000);
account.withdraw(5_000);
assertAll("입·출금 후 잔액과 로그 검사",
() -> assertEquals(105_000, account.getBalance()),
() -> assertTrue(account.getBalance() > 0)
);
}
- assertThrows 로 예외 타입·메시지 둘 다 체크.
- @Nested 로 “예외 상황” 묶어 가독성 및 리포트 구조화.
- assertAll 은 여러 단정 실패를 한꺼번에 보여 줘 디버깅 효율 ↑.
5. 실행 결과 살펴보기
콘솔을 보면
BankAccount 단위 테스트 ✓
예외 상황 ✓
잔액 초과 출금은 불가 ✓
0 이하 금액 입금은 불가 ✓
여�� 검증을 한 번에 ✓
체크가 뜨면 로직이 의도대로 동작! 실패 시 빨간 로그를 따라 원인 추적.
6. 현업 팁
- assertThat(AssertJ)로 가독성-좋은 fluent API 사용 가능.
- @ParameterizedTest 로 다양한 금액 데이터 드라이브 테스트.
- Spring Boot 환경이라면 @SpringBootTest 대신 @WebMvcTest, @DataJpaTest 등 좁은 범위를 우선 고려하자.
- CI 파이프라인(GitHub Actions)에서 ./gradlew test 단계 추가 → 회귀 버그 즉시 차단.
반응형
'개발' 카테고리의 다른 글
[JAVA] 람다식과 메서드 레퍼런스 (1) | 2025.07.09 |
---|---|
자바 스프링 개발 시작하기 - 3일차 컬렉션과 제네릭으로 학생 명단 관리 (1) | 2025.07.09 |
자바 스프링 개발 시작하기 - 2일차 조건문·반복문과 객체 설계 (0) | 2025.07.08 |
자바 var 키워드 활용법과 주의점 (1) | 2025.07.07 |
자바 스프링 개발 시작하기 - 1일차 환경 세팅과 기초 문법 맛보기 (1) | 2025.07.07 |
Comments