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

2022. 12. 12. 22:00·Unit Testing
반응형

이전 테스트와 문제점

이전에 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


'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
    TensorFlow
    mockito
    numpy
    unit test
    Docker
    Coroutines Context
    Coroutines Channel
    Kotlin
    도커
    junit
    코루틴 Flow
    코루틴 채널
    Coroutines
    컨테이너
    unit testing
    coroutine
    Machine Learning
    코루틴
  • 최근 댓글

  • 최근 글

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

티스토리툴바