IT Developer/Java

Java 기초 <18. Java에서의 네트워크 프로그래밍>

TEMA_ 2025. 3. 19. 09:57
반응형

자바 Java

18. Java에서의 테스트 – JUnit, Mockito, TDD 개념

 

안녕하세요! 태마입니다.

Java 기초 강좌입니다.

 

강좌의 경우 

1. 주제 간단 정리

2. 상세 주제 정리

으로 이루어져 있습니다.

 

자바 Java

포스팅 시작하겠습니다 :)

1. 주제 간단 정리

 

1. 소프트웨어 테스트란?

소프트웨어 테스트개발된 소프트웨어가 정상적으로 동작하는지 확인하는 과정입니다.
✔ 테스트를 통해 버그를 찾고 수정하여, 소프트웨어 품질을 높일 수 있습니다.
✔ Java에서 테스트는 단위 테스트(Unit Testing), 통합 테스트(Integration Testing), 시스템 테스트(System Testing) 등 다양한 레벨로 나눌 수 있습니다.

📌 테스트의 중요성
버그를 조기에 발견하고 수정하여 개발 기간 단축
소프트웨어 품질 향상
코드 유지보수 용이


 

2. JUnit과 단위 테스트(Unit Testing)

JUnitJava에서 가장 많이 사용되는 테스트 프레임워크로, 단위 테스트를 작성하고 실행하는 데 사용됩니다.
단위 테스트애플리케이션의 각 기능을 작은 단위로 테스트하여 기능이 정상적으로 작동하는지 확인합니다.
✔ JUnit은 테스트 메서드, Assertions, Test Suites 등을 사용하여 테스트를 실행하고 결과를 확인합니다.

📌 JUnit을 사용한 단위 테스트의 장점
자동화된 테스트로 반복적인 테스트 작업을 최소화
빠르게 피드백을 제공하여 오류를 조기에 수정할 수 있음
코드 리팩토링 후에도 테스트를 통해 안전하게 코드 변경 가능


 

3. JUnit 기본 사용법

JUnit 5자바 8 이상을 지원하며, 테스트 작성실행을 위한 다양한 기능을 제공합니다.
JUnit 5JUnit 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란?

MockitoJava에서 가장 많이 사용되는 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;  // 간단히 덧셈 기능 구현
    }
}
 
3. 리팩토링하여 코드 최적화 (Refactor)
public class Calculator {
    public int add(int a, int b) {
        return Integer.sum(a, b);  // Integer.sum을 사용하여 최적화
    }
}

📌 TDD 사이클을 통해 테스트와 코드가 함께 발전하는 방식.


5. 테스트 주도 개발에서의 주요 원칙

TDD는 단위 테스트를 통해 소프트웨어 설계와 품질을 개선하는 데 중점을 둡니다.
테스트가 실패하지 않도록 최소한의 코드만 작성
모든 기능은 테스트가 통과한 후에만 추가
리팩토링을 통해 코드의 유지보수성 향상

📌 TDD는 코드의 품질과 안정성을 보장하는 중요한 개발 방법론입니다.


지금까지 JUnit, Mockito, 그리고 TDD에 대해 배웠어요!
👉 "이제 클린 코드 및 리팩토링에 대해 배우고 싶다면?"
다음 회차에서 클린 코드와 리팩토링 원칙을 다뤄봅시다!

반응형