@@ -9,6 +9,7 @@ import org.junit.Test
99import org.mockito.Mockito
1010import org.mockito.kotlin.any
1111import org.mockito.kotlin.doAnswer
12+ import org.mockito.kotlin.doCallRealMethod
1213import org.mockito.kotlin.doReturn
1314import org.mockito.kotlin.doReturnConsecutively
1415import 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