본문 바로가기

서버/TDD

[TDD 공부-java] 3) 예외 처리

새로 배운 annotation

  1. @DisplayName(""): 테스트에 표시 이름을 붙이는 annotation
  2. @Disabled
  3. : 특정 테스트를 실행하고 싶지 않을 때
  4. @ParameterizedTest + @ValueSource
    • test메소드에 파라미터 값을 넣어준다. → 즉 여러가지의 값에 대해 동일한 테스트를 하고 싶을 때 사용한다.
    • ex) 길이가 1이상 5이하인 문자열인지 테스트 → 길이가 1미만인 문자열 테스트 + 5초과인 문자열 테스트 이렇게 두 가지의 테스트가 필요하다.
    • @ParameterizedTest(name="여기에 각 파리미터마다의 표시 이름이 들어간다")
    • @ValueSource(타입={넣을 값들의 배열}) : 배열 각 원소를 파라미터에 넣어준다.
    • 항상 @Test가 붙어있는 메소드만 실행을 하는데, @ParameterizedTest가 @Test의 그런 기능도 포함한다.

예외 처리

java에서 실행 예외 종류

실행 예외(RuntimeException) : 컴파일러가 예외 처리 여부를 확인하지 않는다 → 개발자가 예외 처리 코드의 추가 여부를 결정해야 한다.

  • IllegalArgumentException : 메소드에 부적절한 인수를 전달할 때 발생
  • ArithmeticException : 0으로 나누기와 같은 부적절한 산술 연산을 수행할 때 발생
  • IndexOutOfBoundsException : 벗어난 범위의 인덱스 사용시 발생
  • NoSuchElementException : 요구한 원소가 없을 때 발생
  • NullPointerException : Null 값을 가진 참조 변수에 접근할 때 발생
  • NumberFormatException : 숫자로 바꿀 수 없는 문자열을 숫자로 변환하려 할 때 발생
  • RuntimeException : 실행 예외
public static void validateCarNameLength(String name) {
    if (name.length() > MAX_CAR_NAME_LENGTH) {
        throw new IllegalArgumentException("이름은 5자 이하만 가능하다.");
    }
}

예외 테스트하기

    @Test
    @DisplayName("이름이 null, 공백이 아닌지 확인")
    public void carNameShouldNotBeNullOrEmptyTest() {
        assertThrows(IllegalArgumentException.class, ()->{
            Car car = new Car(null);
        });
    }
    @ParameterizedTest(name = "1자리 미만이거나 5자리를 초과하면 IllegalArgumentException 발생 (carName = {arguments})")
    @DisplayName("5자리 이하인지 확인")
    @ValueSource(strings = {"", "overFive"})
    public void carNameShouldBeUnderFiveTest(String name) {
        assertThrows(IllegalArgumentException.class, () -> {
           Car.of(name);
        });
    }

오늘 내용 전체 실습

아래의 2021.06.28의 커밋을 보면 오늘 내가 공부하고 실습한 내용을 볼 수 있다. 

https://github.com/Hyun-juhee/java-racingcar/commits/develop

 

Hyun-juhee/java-racingcar

TDD project 1. Contribute to Hyun-juhee/java-racingcar development by creating an account on GitHub.

github.com

 

반응형