[kotlin] JUnit 테스트와 파일 입출력
JUnit은 자바 및 코틀린과 같은 JVM 언어로 작성된 코드의 단위 테스트에 널리 사용되는 프레임워크입니다. 파일 입출력과 같은 외부 리소스를 다룰 때 JUnit을 활용하여 테스트하는 것은 매우 중요합니다. 이 포스트에서는 코틀린과 JUnit을 사용하여 파일 입출력을 효과적으로 테스트하는 방법에 대해 알아보겠습니다.
JUnit 도입
우선 프로젝트의 build.gradle 또는 build.gradle.kts 파일에서 JUnit을 의존성으로 추가해야 합니다.
dependencies {
testImplementation 'junit:junit:4.13.1'
}
파일 입출력 테스트 코드 작성
다음은 간단한 파일 입출력 기능을 하는 FileHandler 클래스입니다.
import java.io.File
class FileHandler {
fun readFileContents(filePath: String): String {
val file = File(filePath)
return file.readText()
}
fun writeFileContents(filePath: String, content: String) {
val file = File(filePath)
file.writeText(content)
}
}
JUnit을 사용한 테스트 코드 작성
이제 JUnit을 사용하여 FileHandler 클래스의 파일 입출력 기능을 테스트하는 코드를 작성해보겠습니다.
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.Assertions.*
class FileHandlerTest {
private val fileHandler = FileHandler()
private val testFilePath = "testFile.txt"
private val testContent = "Hello, world!"
@Test
fun testFileReadWrite() {
fileHandler.writeFileContents(testFilePath, testContent)
val readContent = fileHandler.readFileContents(testFilePath)
assertEquals(testContent, readContent)
}
}
파일 시스템을 모킹한 테스트
일부 파일 시스템 구현체는 파일을 실제로 생성하고 다루기 때문에 실제 파일을 다루는 대신에 java.nio.file.FileSystem 인터페이스를 사용하여 파일 시스템을 모킹해야 할 수도 있습니다. 아래는 파일 시스템을 모킹한 FileHandler 클래스의 테스트 코드입니다.
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.Assertions.*
import java.nio.file.FileSystem
import java.nio.file.FileSystems
import java.nio.file.Files
import java.nio.file.Path
class FileHandlerMockTest {
private val fileHandler = FileHandler()
@Test
fun testFileReadWrite() {
val filePath = "testFile.txt"
val content = "Hello, world!"
val fileSystem: FileSystem = FileSystems.getDefault()
val testFile: Path = fileSystem.getPath(filePath)
fileHandler.writeFileContents(filePath, content)
val readContent = fileHandler.readFileContents(filePath)
assertEquals(content, readContent)
// Clean up
Files.deleteIfExists(testFile)
}
}
마무리
JUnit을 사용하여 파일 입출력 기능을 가진 클래스를 효과적으로 테스트하는 방법을 살펴보았습니다. JUnit을 이용하면 파일 입출력 테스트를 쉽게 작성하고 외부 리소스를 다룰 때 예상치 못한 문제를 발견할 수 있습니다. 이를 통해 안정적인 파일 입출력 기능을 보장할 수 있습니다.
참고 문헌: