Home [Spring] JUnit
Post
Cancel

[Spring] JUnit

JUnit 없이 단위테스트

  • 단위 테스트를 제일 쉽고 빠르게 적용할 수 있는 부분은 helper class와 utility class

  • Utility Class 논쟁

    • 유틸리티 클래스의 메서드들은 일반적으로 클래스의 객체로 인스턴스화 필요 X
      • 정적 메서드로 구성
    • 객체 지향 세계에서는 유틸리티 클래스 사용을 지양하고 유틸리티 클래스조차 객체 지향적 구성 위해 노력
    • Spring Framework에서조차 StringUtils, BeanUtils 같은 유틸리티 클래스 지원
  • 헬퍼 클래스 예

    ```java public class StampCalculatorTestWithoutJUnit { public static void main(String[] args) { calculateStampCountTest(); }

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    private static void calculateStampCountTest() {
        // given
        int nowCount = 5;
        int earned = 3;
          
        // when
        int actual = StampCalculator,calculateStampCount(nowCount, earned);
          
        int expected = 7;
          
        // then
        System.out.println(expected == actual);
     }  }
    

    public class StampCalculator { public static int calculateStampCount(int nowCount, int earned) { return nowCount + earned; }

    1
    2
    3
    4
    5
    6
    
     public static int calculateEarnedStampCount(Order order) {
         return order.getOrderCoffees().stream().
                 .map(orderCoffee::getQuantity)
                 .mapToInt(quantity -> quantity)
                 .sum();
     }  }
    

실행 결과 false ```

  • Given-When-Then 표현 스타일 (🔗BDD, Behavior Driven Development)

    • Given
      • 테스트를 위한 준비과정 명시
      • 테스트에 필요한 전제조건
      • 테스트 대상에 전달되는 입력값 역시 포함
    • When
      • 테스트 할 동작 지정(실제 테스트 할 코드)
    • Then
      • 테스트 결과 검증 영역
      • 예상 값(expected)와 테스트 대상 메서드 동작 수행 결과(actual)의 값을 비교하여 의도대로 동작하는지 검증(Assertion)하는 코드
  • Assertion

    • 테스트 결과를 검증할 때 사용
    • 예상하는 결과 값이 참(true)이길 바라는 것

JUnit

  • JUnit

    • Java 언어로 만들어진 애플리케이션을 테스트하기 위한 오픈 소스 테스트 프레임워크
    • Java 표준 테스트 프레임워크
  • JUnit 기본 작성법

    • src/test 디렉토리 안에 작성
      • Spring Boot Intializr에서 Gradle 기반 Spring Boot 프로젝트 생성 시
      • 기본으로 src/test 디렉토리 만들어짐
      • 기본으로 testImplementation >'org.springframework.boot:spring-boot-starter-test' 스타터 포함됨
      • 기본으로 JUnit 포함됨
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    import static org.junit.jupiter.api.Assertions.assertEquals;
      
    public class HelloJUnitTest {
        @DisplayName("Hello JUnit Test")  // 테스트 케이스 실행 시 실행 결과창에 표시되는 이름 지정
        @Test
        public void assertionTest() {
            String expected = "Hello, JUnit";
            String actual = "Hello, JUnit";
      
            assertEquals(expected, actual); // 예상값과 실제값 비교 검증
        }
    }
    
  • JUnit Assertion Methods

    • assertEquals(expexted, actual) : 두 값이 같은지 검증
    • assertNotEquals(expected, actual) : 두 값이 다른지 검증
    • assertNotNull(actual, “”) : 첫번째 인자 값이 Null인지 확인, 테스트 실패 시 두번째 인자 문자열 출력
    • assertThrows( .class, () -> TestMethod()) : 두번째 인자인 람다 표현식은 테스트 대상 메서드가 첫번째 인자인 발생 예상 예외가 생기는지 검증 (Executable 함수형 인터페이스)
    • 🔗추가 메서드1
    • 🔗추가 메서드2
    • 🔗Assuption Methods : 조건부 테스트
  • 테스트 케이스 실행 전, 후처리

    • @Before (@BeforeAll) : 해당 클래스의 테스트 실행 전, 단 한번만 실행
    • @BeforeEach : 각 테스트 실행전마다 실행
    • @After (@AfterAll) : 해당 클래스의 테스트 실행 후, 단 한번만 실행
    • @AfterEach : 각 테스트 실행 후마다 실행
This post is licensed under CC BY 4.0 by the author.