자바 Java
18. Java에서의 테스트 – JUnit, Mockito, TDD 개념
안녕하세요! 태마입니다.
Java 기초 강좌입니다.
강좌의 경우
1. 주제 간단 정리
2. 상세 주제 정리
으로 이루어져 있습니다.
자바 Java
포스팅 시작하겠습니다 :)
1. 주제 간단 정리
1. 소프트웨어 테스트란?
소프트웨어 테스트는 개발된 소프트웨어가 정상적으로 동작하는지 확인하는 과정입니다.
✔ 테스트를 통해 버그를 찾고 수정하여, 소프트웨어 품질을 높일 수 있습니다.
✔ Java에서 테스트는 단위 테스트(Unit Testing), 통합 테스트(Integration Testing), 시스템 테스트(System Testing) 등 다양한 레벨로 나눌 수 있습니다.
📌 테스트의 중요성
✔ 버그를 조기에 발견하고 수정하여 개발 기간 단축
✔ 소프트웨어 품질 향상
✔ 코드 유지보수 용이
2. JUnit과 단위 테스트(Unit Testing)
JUnit은 Java에서 가장 많이 사용되는 테스트 프레임워크로, 단위 테스트를 작성하고 실행하는 데 사용됩니다.
✔ 단위 테스트는 애플리케이션의 각 기능을 작은 단위로 테스트하여 기능이 정상적으로 작동하는지 확인합니다.
✔ JUnit은 테스트 메서드, Assertions, Test Suites 등을 사용하여 테스트를 실행하고 결과를 확인합니다.
📌 JUnit을 사용한 단위 테스트의 장점
✔ 자동화된 테스트로 반복적인 테스트 작업을 최소화
✔ 빠르게 피드백을 제공하여 오류를 조기에 수정할 수 있음
✔ 코드 리팩토링 후에도 테스트를 통해 안전하게 코드 변경 가능
3. JUnit 기본 사용법
JUnit 5는 자바 8 이상을 지원하며, 테스트 작성 및 실행을 위한 다양한 기능을 제공합니다.
✔ JUnit 5는 JUnit Platform, JUnit Jupiter, JUnit Vintage의 세 가지 주요 요소로 구성되어 있습니다.
✔ @Test 애노테이션을 사용하여 테스트 메서드를 정의하고, assertions을 사용하여 예상 결과를 비교합니다.
✅ JUnit 기본 예제
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
public class CalculatorTest {
@Test
public void addTest() {
Calculator calculator = new Calculator();
assertEquals(5, calculator.add(2, 3)); // 2 + 3이 5인지 확인
}
@Test
public void subtractTest() {
Calculator calculator = new Calculator();
assertEquals(1, calculator.subtract(3, 2)); // 3 - 2가 1인지 확인
}
}
📌 assertEquals를 사용하여 테스트의 예상 결과와 실제 결과를 비교할 수 있음.
2. 상세 주제 정리
1. Mockito란?
Mockito는 Java에서 가장 많이 사용되는 Mocking 프레임워크입니다.
✔ Mock 객체는 테스트 대상이 되는 객체의 외부 의존성을 대체하는 객체로, 실제 구현을 대신하여 테스트 환경을 단순화합니다.
✔ Mockito를 사용하면 **의존성 객체를 쉽게 모킹(mocking)**하여 단위 테스트를 독립적으로 작성할 수 있습니다.
📌 Mockito의 주요 기능
✔ Mock 객체 생성 : 실제 객체의 행동을 모방
✔ Stubbing : 메서드 호출 시 반환 값을 지정
✔ Verify : 메서드가 호출되었는지 검증
2. Mockito 기본 사용법
Mockito를 사용하면 외부 의존성을 모킹하여 실제 객체가 아닌 가짜 객체로 테스트를 수행할 수 있습니다.
✅ Mockito 기본 예제
import static org.mockito.Mockito.*;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
public class MockitoExampleTest {
@Test
public void testMocking() {
// List 인터페이스를 모킹
List<String> mockedList = mock(List.class);
// 메서드 호출 시 반환 값 지정
when(mockedList.size()).thenReturn(10);
// 테스트 수행
assertEquals(10, mockedList.size()); // size()가 10을 반환해야 함
}
}
📌 mock()을 사용하여 객체를 모킹하고, when()으로 반환 값을 지정할 수 있음.
3. TDD (테스트 주도 개발)
**TDD(Test-Driven Development)**는 테스트 케이스를 먼저 작성하고, 그에 맞는 코드를 구현하는 개발 방법입니다.
✔ Red-Green-Refactor 사이클로 진행됩니다:
- Red: 실패하는 테스트를 작성
- Green: 테스트가 통과하는 최소한의 코드를 작성
- Refactor: 코드를 리팩토링하여 가독성 향상
📌 TDD의 장점
✔ 코드 품질 향상 : 테스트를 먼저 작성하여 코드 품질을 높이고, 버그를 사전에 방지
✔ 디자인 향상 : 테스트 중심의 설계로 유연한 코드 작성
✔ 빠른 피드백 : 즉각적인 테스트 결과 제공으로 개발 속도 향상
4. TDD 예제
✅ TDD를 활용한 예제
1. 먼저 실패하는 테스트 작성 (Red)
public class CalculatorTest {
@Test
public void testAdd() {
Calculator calculator = new Calculator();
assertEquals(5, calculator.add(2, 3)); // 실패하는 테스트
}
}
2. 그에 맞는 최소 코드를 작성하여 테스트 통과 (Green)
public class Calculator {
public int add(int a, int b) {
return a + b; // 간단히 덧셈 기능 구현
}
}
public class Calculator {
public int add(int a, int b) {
return Integer.sum(a, b); // Integer.sum을 사용하여 최적화
}
}
📌 TDD 사이클을 통해 테스트와 코드가 함께 발전하는 방식.
5. 테스트 주도 개발에서의 주요 원칙
TDD는 단위 테스트를 통해 소프트웨어 설계와 품질을 개선하는 데 중점을 둡니다.
✔ 테스트가 실패하지 않도록 최소한의 코드만 작성
✔ 모든 기능은 테스트가 통과한 후에만 추가
✔ 리팩토링을 통해 코드의 유지보수성 향상
📌 TDD는 코드의 품질과 안정성을 보장하는 중요한 개발 방법론입니다.
✅ 지금까지 JUnit, Mockito, 그리고 TDD에 대해 배웠어요!
👉 "이제 클린 코드 및 리팩토링에 대해 배우고 싶다면?"
✅ 다음 회차에서 클린 코드와 리팩토링 원칙을 다뤄봅시다!
'IT Developer > Java' 카테고리의 다른 글
Java 기초 <20. Java와 Spring을 함께 사용할 때 유용한 팁 (Spring Boot 연계)> (0) | 2025.03.21 |
---|---|
Java 기초 <19. 클린 코드 및 리팩토링 – SOLID 원칙 적용> (2) | 2025.03.20 |
Java 기초 <17. Java 디자인 패턴 – 싱글톤, 팩토리, 전략 패턴 등> (1) | 2025.03.18 |
Java 기초 <16. Java 성능 최적화 및 메모리 관리 (Heap, Stack, GC 튜닝)> (2) | 2025.03.17 |
Java 기초 <15. Java의 리플렉션(Reflection)과 애노테이션(Annotation) 활용> (1) | 2025.03.16 |
Java 기초 <14. JVM 내부 구조 및 GC 원리 (G1 GC, ZGC, Shenandoah)> (1) | 2025.03.15 |
Java 기초 <13. Java 18~현재 최신 트렌드 – Virtual Threads, GraalVM, CRaC> (1) | 2025.03.14 |
Java 기초 <12. Java 5~17 주요 기능 변화 (제네릭, 스트림, 람다, 레코드 등)> (1) | 2025.03.13 |