@Before Annotation 사용해 테스트 환경 설정하기

2022. 12. 12. 22:00·Unit Testing
목차
  1. 이전 테스트와 문제점
  2. @Before 메서드의 이해
  3. @Before 사용해 테스트 환경 설정하기
  4. Before 사용 시 주의점
반응형

이전 테스트와 문제점

이전에 MinuteValidatorTest에서 두가지 테스트를 진행했고 MinuteValidator을 다음과 같이 테스트 내부에서 초기화했다.

internal class MinuteValidatorTest {
    @Test
    fun testMinuteValidator() {
        val minuteValidator = MinuteValidator()
        assertEquals(minuteValidator.isValid(30), true)
    }
}
internal class MinuteValidatorTest {
    @Test
    fun testMinuteValidator() {
        val minuteValidator = MinuteValidator()
        assertEquals(minuteValidator.isValid(70), false)
    }
}

 

이 둘을 하나의 클래스에서 진행하려면 어떻게 해야할까? 단순히 두개의 function의 이름만 다르게 만든 다음 class 내부에 넣으면 된다.

internal class MinuteValidatorTest {
    @Test
    fun isValidReturnsTrueIfMinuteIn0to59() {
        val minuteValidator = MinuteValidator()
        assertEquals(minuteValidator.isValid(30), true)
    }
    
    @Test
    fun isValidReturnsFalseIfMinuteNotIn0to59() {
        val minuteValidator = MinuteValidator()
        assertEquals(minuteValidator.isValid(70), false)
    }
}

 

하지만, 위 방식에서 MinuteValidator을 테스트 하기 위해서 MinuteValidator을 초기화 하는 부분이 중복된 것을 알 수 있다. 

 

 

@Before 메서드의 이해

각 테스트 전에 실행되어야 하는 메서드가 있는 경우에는 @Before Annotation이 붙은 메서드를 만들면 된다.

 

internal class MinuteValidatorTest {
    @Before
    fun setUp() {
        println("setUp Test")
    }

    @Test
    fun isValidReturnsTrueIfMinuteIn0to59() {
        val minuteValidator = MinuteValidator()
        assertEquals(minuteValidator.isValid(30), true)
    }

    @Test
    fun isValidReturnsFalseIfMinuteNotIn0to59() {
        val minuteValidator = MinuteValidator()
        assertEquals(minuteValidator.isValid(70), false)
    }
}

 

@Before Annotation이 붙은 메서드는 매 테스트 시작 전에 실행된다. 예를 들어 위 코드의 setUp 메서드는 테스트1과 테스트2 시작 전에 실행되어 "setUp Test를 출력한다. 위 코드를 실행하면 테스트가 2개 있으므로 setUp Test가 두 번 출력되는 것을 확인할 수 있다. 

 

 

@Before 사용해 테스트 환경 설정하기

앞의 내용을 응용하면 테스트 환경을 설정하는 공통된 코드가 있는 경우 @Before을 활용해 테스트 환경을 통합할 수 있다. 보통 테스트 하고자 하는 class가 초기화 되는 부분이 @Before Annotation 이 붙은 메서드로 통합된다.

 

따라서 MinuteValidatorTest의 테스트 환경 설정 부분은 다음과 같이 통합될 수 있다.

internal class MinuteValidatorTest {
    lateinit var minuteValidator: MinuteValidator
    
    @Before
    fun setUp() {
        minuteValidator = MinuteValidator()
    }
    
    @Test
    fun isValidReturnsTrueIfMinuteIn0to59() {
        assertEquals(minuteValidator.isValid(30), true)
    }

    @Test
    fun isValidReturnsFalseIfMinuteNotIn0to59() {
        assertEquals(minuteValidator.isValid(70), false)
    }
}

 

이제 다른 테스트를 더 추가하더라도 class을 초기화 하는 부분을 따로 설정해줄 필요가 없다.

 

Before 사용 시 주의점

주의할 점은, 테스트를 작성할 때까지 작성된 테스트들에서는 공통된 환경이더라도 이후 추가될 테스트에서는 공통된 환경이 아닐 가능성이 존재하는 경우  Before에 쓰는 것이 권장되지 않는다는 점이다.

 

이 부분 주의해서 @Before을 사용하도록 하자.

반응형

'Unit Testing' 카테고리의 다른 글

IntelliJ, Android Studio에서 Test Coverage 확인과 Test Coverage의 한계점  (0) 2022.12.15
IntelliJ, Android Studio에서 Test 결과를 시각적으로 확인하는 방법 : Gradle 사용  (0) 2022.12.14
Command Line에서 Test 실행하기 : Gradle Task 활용하기  (0) 2022.12.13
Unit Test 환경 설정하기 : JUnit 환경 설정 하고 테스트 해보기  (0) 2022.12.11
Unit Testing 이란 무엇인가?  (0) 2022.12.10


  1. 이전 테스트와 문제점
  2. @Before 메서드의 이해
  3. @Before 사용해 테스트 환경 설정하기
  4. Before 사용 시 주의점
'Unit Testing' 카테고리의 다른 글
  • IntelliJ, Android Studio에서 Test 결과를 시각적으로 확인하는 방법 : Gradle 사용
  • Command Line에서 Test 실행하기 : Gradle Task 활용하기
  • Unit Test 환경 설정하기 : JUnit 환경 설정 하고 테스트 해보기
  • Unit Testing 이란 무엇인가?
심플코드
심플코드
프로그래밍을 어렵지 않게 풀어서 설명하는 기술 블로그
    반응형
  • 심플코드
    심플코드
    심플코드
  • 전체
    오늘
    어제
    • 분류 전체보기 (96)
      • 안드로이드를 위한 Coroutines (2)
      • Unit Testing (19)
      • GitHub Actions (0)
      • 공식 문서 번역 (35)
        • Coroutines 공식 문서 (35)
      • 알고리즘 (7)
        • Kotlin 자료구조 (0)
        • 알고리즘 (7)
        • Kotlin으로 구현하는 자료구조 (0)
      • 코딩 테스트 (0)
      • Deep Learning (0)
      • Machine Learning Math (17)
        • Linear Algebra (17)
      • ML (0)
      • Docker (15)
      • Kubernetes (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

    • 코틀린 코루틴의 정석 책 출간 소식
  • 인기 글

  • 태그

    pytorch
    Coroutines Flow
    코루틴
    Coroutines
    unit testing
    unit test
    코루틴 채널
    Coroutines Context
    numpy
    Coroutines Channel
    coroutine
    Machine Learning
    Docker
    Kotlin
    junit
    도커
    TensorFlow
    컨테이너
    mockito
    코루틴 Flow
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
심플코드
@Before Annotation 사용해 테스트 환경 설정하기
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.