6/5 단위 테스트, TDD

박세현·2024년 6월 5일
0

3차 프로젝트

목록 보기
9/14
post-thumbnail

JUnit 5 기초1

1. 테스트

  • 단위 테스트
    : 기능 단위별 테스트

  • 통합 테스트
    : 모든 기능을 통합, 유기적으로 잘 동작하는지 테스트




2. 의존성

1) maven 기준

  • junit-jupiter : dependency
  • maven-surefire-plugin : plugin


2) gradle 기준

dependencies {
    testImplementation 'org.junit.jupiter:junit-jupiter-api:버전'
}

test {
    useJUnitPlatform()
}




3. TDD

  • Test Driven Development
  • 테스트 주도 개발
  • 테스트를 통한 설계 방식
  • 테스트를 하기 위한 시나리오 -> 필요한 기능을 개발 -> 테스트 실행 -> 통과x -> 기능 보완(리팩토링) -> 통과ㅇ -> 기능 완성


1) 테스트하기 위한 시나리오

  • 간단한 시나리오 -> 복잡한 시나리오


2) 지속적인 리팩토링(코드의 수정 보완)



3) 기능 완성 후 파일 옮기기

ㄴ 테스트 파일에 있던 파일들 메인으로 옮김




4. @Test 애노테이션

  • 테스트로 사용할 클래스를 만들고 @Test 애노테이션을 메서드를 붙이면 테스트 가능
  • @Test 애노테이션을 붙인 메서드는 private이면 안 된다.

참고) 관례
테스트용 클래스 : 명칭Test




5. 테스트 메서드 : 주요 단언 메서드

1) assertEquals(expected, actual)

  • 예상했던 값(expected)이 실제 결과(actual)와 일치 하는지
  • equals and hashcode : 동등성

    참고)
    assertSame (Object expected, Object actual) : 동일성 비교


예시) assertEquals(expected, actual)



예시) assertEquals(expected, actual)



2) assertNotEquals(unexpected, actual)

  • 예상했던 값과 다르면 통과


3) assertSame (Object expected, Object actual)

  • 예상했던 객체(expected)와 실제 객체(actual)가 일치하는지 체크
  • 주소비교 : 동일성

예시)



4) assertNotSame(Object unexpected, Object actual)



5) assertTrue(boolean condition)

  • true가 나오면 통과


6) assertFalse(boolean condition)

  • false가 나오면 통과


7) assertNull(Object actual)

  • null이 나오면 통과


8) assertNotNull(Object actual)

  • null이 나오지 않으면 통과


9) fail()

  • 특정 상황에서 테스트 실패를 유도하는 경우

예시)



10) assertThrows(Class<T> expectedType, Executable executable)

  • expectedType : 발생 예상되는 예외 클래스 클래스
  • executable : 실행 코드
  • 반환값 : 발생한 예외 객체

예시) TDD



11) assertDoesNotThrow(Executable executable)

  • executable : 실행코드
  • 실행코드 실행 시 예외가 발생 하지 않으면 통과


12) assertAll(Executable... executable)

  • 다 실행 -> 실패한것만 싹 보겠다



6. 테스트 라이프사이클

1) @BeforeEach 애노테이션

  • 각각의 단위 테스트 메서드 실행 전에 실행됨
  • 가장 사용빈도가 높음
  • 단위테스트가 3개면 3번 실행

예시)



예시) @BeforeEach 애노테이션 많이쓰는 상황



2) @AfterEach 애노테이션

  • 각각의 단위 테스트 메서드 실행 후에 실행됨

예시)



3) @BeforeAll 애노테이션

  • 모든 단위테스트 실행 전 (한번만 실행)
  • 정적메서드로 정의

예시)



4) @AfterAll 애노테이션

  • 모든 단위테스트 실행 후 (한번만 실행)
  • 정적메서드로 정의

예시)




7. 추가 애노테이션

1) @DisplayName

  • 테스트에 대한 설명

예시)



예시) 전체 실행



2) @Disabled

  • 테스트 배제
  • 배포할 때 테스트가 통과되지 않으면 배포(jar파일 생성)이 안되기 때문에 간혹 테스트 배제하기도 함

예시)




8. 모든 테스트 실행하기

1) mvn test

  • mvn package : 컴파일 -> 테스트 -> 배포(jar)


2) gradle test

  • gradle build : 컴파일 -> 테스트 -> 배포(jar)




JUnit 5 기초2

1. 조건에 따른 테스트

1) @EnabledOnOs, @DisabledOnOs

  • 윈도우인지 맥인지에 따라 테스트 진행할지 말지
  • Enable : 테스트 진행
  • Disable : 테스트 배제


2) @EnabledOnJre, @DisabledOnJre

  • jre : 자바 버전에 따라 테스트 진행할지 배제할지
  • Enable : 테스트 진행
  • Disable : 테스트 배제


3) @EnabledIfSystemProperty, @DisabledIfSystemProperty



4) @EnabledIfEnvironmentVariable, @DisabledIfEnvironmentVariable

  • 환경변수



2. 태깅과 필터링

  • @Tag 애노테이션은 태스크에 태그를 달 때 사용한다. @Tag 애노테이션은 클래스와 테스트 메서드에 적용할 수 있다.
  • @Tag 애노테이션을 이용하면 메이븐이나 그래들에서 실행할 테스트를 선택할 수 있다.
  • 적용 예)
@Tag("integration")
public class TagTest {
    
    @Tag("very-slow")
    @Test
    void verySlow() {
        int result = someVerySlowOp();
        assertEquals(result, 0);
    }
}
  • 그래들 설정 예)
test {
	useJUnitPlatform {
		includeTags 'integration'
		excludeTags 'slow | very-slow'
	}
}
  • 테스트 포함 대상이나 제외 대상을 지정할 때 태그 식을 사용하는데 태그 식에서는 다음 연산을 이용해서 식을 조합
    !, & |



5. 테스트 메시지

  • assertEquals() 메서드의 세 번째 인자는 테스트에 실패할 때 표시할 메시지로 사용된다.
  • 테스트 코드가 실패하면 다음과 같이 메세지로 전달한 문자열이 실패 안내 문구에 함께 표시된다.
  • 예)
assertEquals(expected.get(i), ret.get(i), "ret[" + i + "]");

--- 출력 ---
org.opentest4j.AssertionFailedError: ret[1] ==> 
Expected: 2
Actual: 6

예시)




6. @TempDir

  • 임시 폴더 생성
  • 파일과 관련된 테스트 코드를 만들다 보면 임시로 사용할 폴더가 필요할 때가 있다. 테스트를 시작하기 전에 임시로 사용할 폴더를 만들고 임시 폴더에 파일을 생성하고 테스트가 끝나면 임시 폴더와 파일을 삭제하는 코드를 직접 만들 수 있지만, 이는 꽤 성가신 작업이다.
  • JUnit 5.4 버전에 추가된 @TempDir 애노테이션을 사용하면 임시 폴더 관련 작업을 테스트 코드에서 쉽게 처리할 수 있다. @TempDir 애노테이션을 필드 또는 라이프사이클 관련 메서드나 테스트 메서드의 파라미터로 사용하면 JUnit은 임시 폴더를 생성하고 @TempDir 애노테이션을 붙인 필드나 파라미터에 임시 폴더 경로를 전달한다. @TempDir 애노테이션은 File 타입이나 Path 타입에 적용할 수 있다.

예시)

ㄴ 임시경로




7. @Timeout

  • 테스트 실행 시간 검증
  • 테스트가 일정 시간 내에 실행되는지 검증
  • 주로 성능테스트시 사용
  • 기본값은 초단위

예시)



예시) 단위 바꾸기

profile
귤귤

0개의 댓글

관련 채용 정보