테스트 용이성(Testability)

테스트 용이성(Testability)

라이브러리 자체를 테스트하는 것과 더불어, 라이브러리를 사용하는 코드도 테스트 가능하도록 보장해야 해요.

전역 상태와 상태를 가진 최상위 함수 피하기

라이브러리는 전역 변수의 상태에 의존하거나, 상태를 가진 최상위 함수를 공개 API의 일부로 제공해서는 안 돼요. 그런 변수와 함수는 라이브러리를 사용하는 코드를 테스트하기 어렵게 만들어요. 테스트가 이러한 전역 값을 제어할 방법을 찾아야 하기 때문이죠.

예를 들어 라이브러리가 현재 시간에 접근하는 전역 접근 함수를 정의한다고 해 봐요:

val instant: Instant = Clock.now()
println(instant)

이 API를 사용하는 어떤 코드든 테스트하기 어려워져요. now() 함수 호출은 항상 실제 현재 시간을 반환하는데, 테스트에서는 가짜 값(fake value)을 반환하는 것이 바람직한 경우가 많기 때문이에요.

테스트 가능성을 활성화하기 위해 kotlinx-datetime 라이브러리는 사용자가 Clock 인스턴스를 얻은 다음 그것으로 현재 시간을 가져오는 API를 제공해요:

val clock: Clock = Clock.System
val instant: Instant = clock.now()
println(instant)

이렇게 하면 라이브러리 사용자가 자신의 클래스에 Clock 인스턴스를 주입하고, 테스트 중에는 실제 구현을 가짜 구현으로 교체할 수 있어요.

더 알아보기

아직 확인하지 않았다면 다음 페이지들도 살펴보는 것을 고려해 보세요: