Lukasz Kalnik
07/25/2025, 8:57 AMTestScope, how can I manually control the passing of virtual time inside a suspending function?
suspend fun doSomethingDelayed() {
delay(10.seconds)
println("Delayed action completed")
}Lukasz Kalnik
07/25/2025, 8:58 AM"test do something delayed" {
doSomethingDelayed()
testCoroutineScheduler.advanceTimeBy(5.seconds)
testCoroutineScheduler.runCurrent()
println("5 seconds passed")
testCoroutineScheduler.advanceTimeBy(5.seconds)
testCoroutineScheduler.runCurrent()
println("Test completed")
}Lukasz Kalnik
07/25/2025, 8:58 AMDelayed action completed
5 seconds passed
Test completedAlbert Chang
07/25/2025, 10:14 AMlaunch { doSomethingDelayed() }.Lukasz Kalnik
07/25/2025, 10:21 AMadvanceTimeBy() inside or outside of launch()?Dmitry Khalanskiy [JB]
07/25/2025, 10:22 AMadvanceTimeBy() can be replaced by a delay in most cases.Albert Chang
07/25/2025, 10:23 AMLukasz Kalnik
07/25/2025, 10:27 AMLukasz Kalnik
07/25/2025, 10:27 AM"test do something delayed" {
launch {
doSomethingDelayed()
}
delay(5.seconds)
println("5 seconds passed")
delay(5.seconds)
println("Test completed")
}Lukasz Kalnik
07/25/2025, 10:28 AMadvanceTimeBy() not work as expected here?Dmitry Khalanskiy [JB]
07/25/2025, 10:32 AMLukasz Kalnik
07/25/2025, 10:33 AMDmitry Khalanskiy [JB]
07/25/2025, 10:35 AM"test do something delayed" {
launch {
doSomethingDelayed()
}
advanceUntilIdle(5.seconds)
println("5 seconds passed")
advanceUntilIdle(5.seconds)
println("Test completed")
}Dmitry Khalanskiy [JB]
07/25/2025, 10:57 AMadvanceTimeBy(duration) stops right before executing the tasks scheduled to execute duration later. To execute those tasks, advanceTimeBy should be followed by runCurrent. This gives much more flexible control in the technical scenarios where manually controlling virtual time is actually necessary.Lukasz Kalnik
07/25/2025, 12:06 PMadvanceTimeBy() anymore. It must lie somehow in my Kotest configuration in my main project.rkeazor
09/02/2025, 9:04 PM