Kotlin 프로젝트의 build.gradle.kts 파일에 테스트 관련 라이브러리를 추가해야 합니다.
dependencies {
testImplementation("org.junit.jupiter:junit-jupiter:5.10.0") // JUnit 5 라이브러리 또는 4
testImplementation("io.mockk:mockk:1.13.7") // Mock 라이브러리 (선택)
}
tasks.test { // 테스트 태스크도 설정
useJUnitPlatform() // JUnit 플랫폼 사용
}
클래스에 커서를 두고 alt + insert 누르면 Generate이 뜨는데 test를 택하면 test 디렉토리에 해당 테스트 클래스가 자동으로 생성됩니다.
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.Assertions.*
class ExampleTest {
@BeforeEach // Lifecycle 메서드 (junit4에서는 Each떼고)
fun setup() {
println("테스트 실행 전 준비 작업")
}
@AfterEach
fun tearDown() {
println("테스트 실행 후 정리 작업")
}
@Test
fun testException() {
val exception = assertThrows<IllegalArgumentException> {
throw IllegalArgumentException("예외 발생")
}
assertEquals("예외 발생", exception.message)
}
@ParameterizedTest // 파라미터화 테스트
@ValueSource(ints = [1, 2, 3, 4, 5])
fun testValueSource(value: Int) {
assertTrue(value > 0) // 모든 값이 0보다 큰지 확인
}
}
@Test
fun testStringLength() {
// Arrange : 테스트의 초기 상태를 설정. 테스트에 필요한 객체나 데이터 준비
val input = "Kotlin"
// Act : 동작을 수행하거나 메서드를 호출
val length = input.length
// Assert :예상 결과와 실제 결과를 비교
assertEquals(6, length) // 길이가 6인지 확인
}
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Test
class CalculatorTest {
@Test
fun `should return correct sum`() {
// Given : 테스트의 초기 상태를 설정 (조건, 전제 조건)
val calculator = Calculator()
val a = 5
val b = 10
// When : 수행하려는 동작이나 이벤트를 명시
val result = calculator.add(a, b)
// Then : 기대하는 결과를 명확히 작성
assertEquals(15, result)
}
}
class Calculator {
fun add(a: Int, b: Int) = a + b
}
assertEquals(expected, actual) 두 값이 같은지 비교
assertNotEquals(expected, actual) 두 값이 같지 않은지 확인
assertTrue(condition) 조건이 참인지 확인
assertFalse(condition) 조건이 거짓인지 확인
assertNull(value) 값이 null인지 확인
assertNotNull(value) 값이 null이 아닌지 확인
assertThrows(exceptionClass, executable) 특정 예외가 발생했는지 확인
assertDoesNotThrow(executable) 실행 중 예외가 발생하지 않는지 확인
assertContains(collection, element) 컬렉션에 특정 요소가 포함되어 있는지 확인.
assertFailsWith<T>() 특정 예외 발생 여부 확인
assertIs<T>() 객체의 타입이 특정 타입인지 확인
Mock 객체는 주로 단위 테스트(Unit Test)에서 외부 의존성을 모킹(mocking)하여 테스트 환경을 통제하고, 테스트 대상을 격리하는 데 사용됩니다. 모킹을 통해 실제 객체를 사용하는 대신, 테스트에 필요한 가짜 객체를 사용하여 테스트의 일관성, 속도, 안정성을 높일 수 있습니다.