Skip to content

Commit 53e5146

Browse files
committed
Improve unit tests for stubbing value class return values of suspendable functions.
1 parent cda39a2 commit 53e5146

File tree

1 file changed

+37
-7
lines changed

1 file changed

+37
-7
lines changed

tests/src/test/kotlin/test/CoroutinesOngoingStubbingTest.kt

Lines changed: 37 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import org.junit.Test
99
import org.mockito.Mockito
1010
import org.mockito.kotlin.any
1111
import org.mockito.kotlin.doAnswer
12+
import org.mockito.kotlin.doCallRealMethod
1213
import org.mockito.kotlin.doReturn
1314
import org.mockito.kotlin.doReturnConsecutively
1415
import org.mockito.kotlin.doSuspendableAnswer
@@ -288,7 +289,8 @@ class CoroutinesOngoingStubbingTest {
288289
/* Given */
289290
val valueClass = ValueClass("A")
290291
val mock = mock<SuspendFunctions> {
291-
on(mock.valueClassResult()) doSuspendableAnswer {
292+
// TODO: simplify to "on (mock.valueClassResult()) doReturn valueClass"
293+
on (mock.valueClassResult()) doSuspendableAnswer {
292294
delay(1)
293295
valueClass
294296
}
@@ -302,36 +304,38 @@ class CoroutinesOngoingStubbingTest {
302304
}
303305

304306
@Test
305-
fun `should stub suspendable function call with nullable value class result`() = runTest {
307+
fun `should stub suspendable function call with nullable value class result`() {
306308
/* Given */
307309
val valueClass = ValueClass("A")
308310
val mock = mock<SuspendFunctions> {
309-
on (mock.nullableValueClassResult()) doSuspendableAnswer {
311+
// TODO: simplify to "on { nullableValueClassResult() } doReturn valueClass"
312+
on { nullableValueClassResult() } doSuspendableAnswer {
310313
delay(1)
311314
valueClass
312315
}
313316
}
314317

315318
/* When */
316-
val result: ValueClass? = mock.nullableValueClassResult()
319+
val result: ValueClass? = runBlocking { mock.nullableValueClassResult() }
317320

318321
/* Then */
319322
expect(result).toBe(valueClass)
320323
}
321324

322325
@Test
323-
fun `should stub suspendable function call with nested value class result`() = runTest {
326+
fun `should stub suspendable function call with nested value class result`() {
324327
/* Given */
325328
val nestedValueClass = NestedValueClass(ValueClass("A"))
326329
val mock = mock<SuspendFunctions> {
327-
on (mock.nestedValueClassResult()) doSuspendableAnswer {
330+
// TODO: simplify to "on { nestedValueClassResult() } doReturn nestedValueClass"
331+
on { nestedValueClassResult() } doSuspendableAnswer {
328332
delay(1)
329333
nestedValueClass
330334
}
331335
}
332336

333337
/* When */
334-
val result: NestedValueClass = mock.nestedValueClassResult()
338+
val result: NestedValueClass = runBlocking { mock.nestedValueClassResult() }
335339

336340
/* Then */
337341
expect(result).toBe(nestedValueClass)
@@ -373,4 +377,30 @@ class CoroutinesOngoingStubbingTest {
373377
/* Then */
374378
expect(result).toBe(primitiveValueClass)
375379
}
380+
381+
@Test
382+
fun `should stub consecutive suspendable function call with value class results`() {
383+
/* Given */
384+
val valueClassA = ValueClass("A")
385+
val valueClassB = ValueClass("B")
386+
val mock = mock<SuspendFunctions> {
387+
// TODO: simplify to "on { valueClassResult() }.doReturnConsecutively(valueClassA, valueClassB)"
388+
on { valueClassResult() } doSuspendableAnswer {
389+
delay(1)
390+
valueClassA
391+
} doSuspendableAnswer {
392+
delay(1)
393+
valueClassB
394+
}
395+
}
396+
397+
/* When */
398+
val (result1, result2) = runBlocking {
399+
mock.valueClassResult() to mock.valueClassResult()
400+
}
401+
402+
/* Then */
403+
expect(result1).toBe(valueClassA)
404+
expect(result2).toBe(valueClassB)
405+
}
376406
}

0 commit comments

Comments
 (0)