프로그램을 빠르게 개발하기 위한 필수
'지속적인 테스트'
우리는 코드를 짰을 때 이 코드를 내가 의도한 대로 잘 짰는지, 내부적으로 실행되었을 때 잘못된 곳은 없는지 확인하는 과정이 필요하다.
우리는 이를 위해 println을 사용하여 올바름을 검증하는 것은 부실한 접근 방법이기에 테스트를 배운다.
[ 테스트 ]
테스트
- JUnit : 자바에서 널리 쓰이는 테스트 프레임워크로 코틀린에서도 유용하게 사용
- 코테스트 : 코틀린 전용으로 설계되어 코틀린 언어의 여러 기능을 살려 작성
- 스펙 프레임워크 : 명세 테스트라는 다른 형태의 테스트 제공
* 아래에서 사용하는 테스트의 경우 Atomic Kotlin 책에서 제공하는 테스트 프레임워크로 아래와 같은 특징을 가지고 있음을 참고
- 식의 예상 결과값을 보여줌
- 프로그램이 실행되고 있음을 알 수 있도록 출력을 제공하며, 모든 테스트가 성공해도 출력을 제공
- 개발을 배우는 과정에서 더 빨리 테스트의 개념을 몸에 익히도록 함
[ 중위 표기법 ]
- 전위 / 중위 / 후위 표기법이 존재
- infix function() : 중위 표기법으로, a.함수(b)라는 호출을 a 함수 b 처럼 호출자 점(.)과 파라미터 괄호를 생략하고 함수 명만으로 호출할 수 있도록 코틀린에서 제공하는 표현식
- infix 키워드를 붙인 함수만 중위 표기법을 사용해 호출 가능
* AtomicTest에서는 infix 키워드를 이용해 infix eq, infix neq가 정의되어 있어 '식 eq / neq 예상값' 으로 사용
* 실행 값이 T일 경우 왼쪽 식의 결과를 출력하며, F일 경우 실행하면서 오류를 보여줌
package atomictest
fun main(){
val v1 = 11
val v2 = "Ontology"
v1 eq 11 // 출력 결과 : 11
v2 eq "Ontology" // 출력 결과 : Ontology
v2 neq "Epistemology" // 출력 결과 : Ontology
v2 eq "Epistemology" // 출력 결과 : [Error]: Ontology != Epistemology
}
* AtomicTest에서는 println()을 대체할 수 있는 trace()함수(출력을 저장해서 나중에 사용할 수 있도록 함)가 존재
package atomictest
fun main(){
trace("line 1")
trace(47)
trace("line 2")
trace eq """
line 1
47
line 2
"""
// 출력 결과 :
//line 1
//47
//line 2
}
[ 테스트 주도 개발 TDD ]
TDD(Test Driven Development, TDD)
- 테스트 주도 개발
- 코드를 작성하기 전에 테스트를 먼저 작성해 실패시킨 후, 나중에 테스트를 통과하도록 코드를 작성
- 자신이 생각하는 대상을 정말로 테스트하고 있는지 확실히 확인할 수 있는 방법
* 아래는 테스트를 실패시킨 후 결과를 통해 테스트를 통과할 수 있도록 코드를 Develop 시킨 것을 볼 수 있다.
[ 테스트 실패 ]
package testing1
import atomictest.eq
fun main(){
calculateBMI(160.0, 68.0) eq "Normal weight"
calculateBMI(100.0, 68.0) eq "Underweight"
calculateBMI(200.0, 68.0) eq "Overweight"
}
fun calculateBMI(weight:Int, height:Int) = "Normal weight"
[ 테스트 성공 ]
package testing1
import atomictest.eq
fun main(){
calculateBMI(160.0, 68.0) eq "Normal weight"
calculateBMI(100.0, 68.0) eq "Underweight"
calculateBMI(200.0, 68.0) eq "Overweight"
}
fun calculateBMI(weight:Double, height:Double):String{
val bmi = weight/(height*height)*703.07
return if(bmi<18.5) "Underweight"
else if(bmi<25) "Normal weight"
else "Overweight"
}
[ 오늘의 학습 소감 ]
오늘은 테스트에 대해서 간략하게 보았다. 테스트는 실제로 코드를 작성하면서 매우 중요한 요소이지만 막상 코드를 짜면 테스트 코드 작성이 어려워 작성하지 못하는 경우가 많고 나 또한 이러한 경우 중 한명에 속하고 있다. 그렇기에 이번 아톰이 나에게는 매우 중요한 아톰 중 하나였다고 생각한다. 심화적인 테스트에 대해서 작성하지는 않았지만 infix function, TDD 기법 등 테스트에서 사용하는 것들에 대해서 간략하게 알 수 있었고, AtomicTest에서 제공한 프레임워크를 보고 (물론 어려워서 이해를 하지는 못했다) 테스트 코드를 작성하고 실행해 보면서 테스트에 대한 기초적인 부분은 익힐 수 있는 시간이었다.
'공부 자료 > 코틀린[Kotlin]' 카테고리의 다른 글
[Atomic 24] 리스트 (feat. List / MutableList) (1) | 2024.01.25 |
---|---|
[Atomic 23] 예외 (feat. 예외의 기초) (0) | 2024.01.23 |
[Atomic 21] 패키지 (0) | 2024.01.22 |
[Atomic 20] 가시성 제한하기 (feat. 접근 변경자) (0) | 2024.01.19 |
[Atomic 19] 생성자 (0) | 2024.01.18 |