christophsturm
10/29/2020, 12:28 PMsam
10/29/2020, 12:39 PMchristophsturm
10/29/2020, 1:01 PMchristophsturm
10/29/2020, 1:02 PMsam
10/29/2020, 1:02 PMclass MyTest : FunSpec() {
init {
test("foo") { }
}
}
sam
10/29/2020, 1:02 PMchristophsturm
10/29/2020, 1:02 PMchristophsturm
10/29/2020, 1:03 PMsam
10/29/2020, 1:04 PMchristophsturm
10/29/2020, 1:05 PMclass TestRuleExample {
@get:Rule
public val timeout = CoroutinesTimeout.seconds(1)
private suspend fun someFunctionDeepInTheStack() {
withContext(<http://Dispatchers.IO|Dispatchers.IO>) {
delay(Long.MAX_VALUE) // Hang method
}
}
@Test
fun hangingTest() = runBlocking {
val job = launch {
someFunctionDeepInTheStack()
}
job.join() // Join will hang
}
}
After 1 second, test will fail with TestTimeoutException
and all coroutines (runBlocking
and launch
) and their stacktraces will be dumped to the console.christophsturm
10/29/2020, 1:06 PMsam
10/29/2020, 1:06 PMtest("test case with timeout").config(timeout = 150.milliseconds) {
// coroutines here
}
sam
10/29/2020, 1:06 PMsam
10/29/2020, 1:06 PMsam
10/29/2020, 1:07 PMchristophsturm
10/29/2020, 1:07 PMsam
10/29/2020, 1:07 PMsam
10/29/2020, 1:07 PMchristophsturm
10/29/2020, 1:13 PMsam
10/29/2020, 1:14 PM