私はdelay()
を使用するKotlinコルーチンを単体テストしようとしています。単体テストの場合、私はdelay()
を気にしません。テストを遅くするだけです。私はdelay()
が呼び出されたときに実際には遅延しない何らかの方法でテストを実行したいと思います。単位を遅くしてKotlinコルーチンをテストする
私はCommonPoolに委任するカスタムコンテキストを使用してコルーチンを実行してみました:
class TestUiContext : CoroutineDispatcher(), Delay {
suspend override fun delay(time: Long, unit: TimeUnit) {
// I'd like it to call this
}
override fun scheduleResumeAfterDelay(time: Long, unit: TimeUnit, continuation: CancellableContinuation<Unit>) {
// but instead it calls this
}
override fun dispatch(context: CoroutineContext, block: Runnable) {
CommonPool.dispatch(context, block)
}
}
「私は、私はちょうど私のコンテキストのdelay()
メソッドから返すことができます願っていたが、その代わりに、それは私のscheduleResumeAfterDelay()
メソッドを呼び出している、と私はドンそれをデフォルトスケジューラに委譲する方法を知っています。 delay()
は、遅延なしで再開される方法
遅延タイムアウトを設定して、テストで非常に小さいものを選択できるようにすることはできませんか? – s1m0nw1
@ s1m0nw1はい、私はむしろ一般的な解決策を持っていて、そのようなコードを変更する必要はありません。 –
@eoinmullan、あなたは同じもののための最小のgitプロジェクトを共有できますか? –