日々是好日

プログラミングについてのあれこれ、ムダ知識など

時刻をパラメータに使用する場合の実装メモ

時刻を扱う場合に、テスト性を持たせるための実装メモ。

インターフェースを介して時刻を実装してやる。

// Kotlin
import java.util.*

interface SystemClock {
  fun getTimeMillis(): Long
  fun getLocale(): Locale
  fun getTimeZone(): TimeZone
}

// 使う側の例
import your.package.SystemClock

fun setTime(d: SystemClock) { ... }

setTime(object : SystemClock {
  override fun getTimeMillis(): Long {
    TODO("Not yet implemented")
  }

  override fun getLocale(): Locale {
    TODO("Not yet implemented")
  }

  override fun getTimeZone(): TimeZone {
    TODO("Not yet implemented")
  }
}

テストのときはエッジケースや定数を実装し、本番ではDate()等を実装すれば( ΦωΦ)σヨシッ!