이전 테스트와 문제점
이전에 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 |