From 8f1f7a2aa62a760c43d5709d58adb16ac81df897 Mon Sep 17 00:00:00 2001 From: Mark Koops Date: Sun, 2 Nov 2025 16:41:20 +0100 Subject: [PATCH] Revamp of ongoing stubbing for suspend functions, by introducing CoroutinesOngoingStubbing as return value of the wheneverBlocking/onBlocking functions. Introducing this coroutines specific implementation of OngoingStubbing allowed for clean and similar API to stub either synchronous or suspend functions. The 'magic' implementation details of applying SuspendableAnswer for suspend functions and to delay within the answer suspend lambda to enforce proper boxing of value classes is all being hidden away from the ordinary users. --- .idea/codeStyles/Project.xml | 37 +- .../kotlin/CoroutinesOngoingStubbing.kt | 213 +++++++ .../org/mockito/kotlin/KInvocationOnMock.kt | 56 +- .../kotlin/org/mockito/kotlin/KStubbing.kt | 103 +++- .../org/mockito/kotlin/OngoingStubbing.kt | 39 +- .../main/kotlin/org/mockito/kotlin/Stubber.kt | 14 +- .../kotlin/org/mockito/kotlin/Whenever.kt | 70 +++ .../org/mockito/kotlin/internal/KAnswer.kt | 4 +- .../kotlin/internal/OngoingStubbingUtil.kt | 80 +++ .../src/test/kotlin/test/CoroutinesTest.kt | 537 ------------------ tests/build.gradle | 2 +- .../mockito/kotlin/internal/KAnswerTest.kt | 141 +++++ .../kotlin/test/AdditionalMatchersTest.kt | 36 +- .../test/kotlin/test/ArgumentCaptorTest.kt | 28 +- tests/src/test/kotlin/test/BDDMockitoTest.kt | 22 +- tests/src/test/kotlin/test/Classes.kt | 28 +- .../test/CoroutinesOngoingStubbingTest.kt | 344 +++++++++++ tests/src/test/kotlin/test/CoroutinesTest.kt | 513 +++++++++++++++++ tests/src/test/kotlin/test/JUnit4Utils.kt | 13 + tests/src/test/kotlin/test/MatchersTest.kt | 188 +++--- tests/src/test/kotlin/test/MockingTest.kt | 72 ++- .../test/kotlin/test/OngoingStubbingTest.kt | 321 +++++++---- tests/src/test/kotlin/test/StubberTest.kt | 14 +- tests/src/test/kotlin/test/StubbingTest.kt | 261 +++++++++ .../src/test/kotlin/test/VerificationTest.kt | 16 +- 25 files changed, 2227 insertions(+), 925 deletions(-) create mode 100644 mockito-kotlin/src/main/kotlin/org/mockito/kotlin/CoroutinesOngoingStubbing.kt create mode 100644 mockito-kotlin/src/main/kotlin/org/mockito/kotlin/Whenever.kt create mode 100644 mockito-kotlin/src/main/kotlin/org/mockito/kotlin/internal/OngoingStubbingUtil.kt delete mode 100644 mockito-kotlin/src/test/kotlin/test/CoroutinesTest.kt create mode 100644 tests/src/test/kotlin/org/mockito/kotlin/internal/KAnswerTest.kt create mode 100644 tests/src/test/kotlin/test/CoroutinesOngoingStubbingTest.kt create mode 100644 tests/src/test/kotlin/test/CoroutinesTest.kt create mode 100644 tests/src/test/kotlin/test/JUnit4Utils.kt create mode 100644 tests/src/test/kotlin/test/StubbingTest.kt diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml index 69f8a38d..704de466 100644 --- a/.idea/codeStyles/Project.xml +++ b/.idea/codeStyles/Project.xml @@ -31,6 +31,30 @@ + + + + + + + + + + + + @@ -95,7 +118,6 @@