From 4917ecce69b678b6836bd3b748d88662e8951dd4 Mon Sep 17 00:00:00 2001 From: Kevin Rocard Date: Tue, 2 Apr 2024 17:55:33 +0200 Subject: [PATCH 1/2] Implement `clearStaticMockk` for KFunction and KProperty --- .../src/jvmMain/kotlin/io/mockk/MockK.kt | 12 +++++++++ .../kotlin/io/mockk/it/StaticMockkTest.kt | 27 +++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/modules/mockk/src/jvmMain/kotlin/io/mockk/MockK.kt b/modules/mockk/src/jvmMain/kotlin/io/mockk/MockK.kt index 53b00c7f9..9e8952001 100644 --- a/modules/mockk/src/jvmMain/kotlin/io/mockk/MockK.kt +++ b/modules/mockk/src/jvmMain/kotlin/io/mockk/MockK.kt @@ -44,6 +44,18 @@ fun unmockkStatic(vararg functions: KFunction<*>) = fun unmockkStatic(vararg functions: KProperty<*>) = unmockkStatic(*functions.map(KProperty<*>::getter).toTypedArray()) +/** + * Clear static mocks. + */ +fun clearStaticMockk(vararg functions: KFunction<*>) = + clearStaticMockk(*functions.map { it.declaringKotlinFile }.toTypedArray()) + +/** + * Clear static mocks. + */ +fun clearStaticMockk(vararg functions: KProperty<*>) = + clearStaticMockk(*functions.map(KProperty<*>::getter).toTypedArray()) + /** * Builds a static mock and unmocks it after the block has been executed. */ diff --git a/modules/mockk/src/jvmTest/kotlin/io/mockk/it/StaticMockkTest.kt b/modules/mockk/src/jvmTest/kotlin/io/mockk/it/StaticMockkTest.kt index 5d8e10914..8eee89857 100644 --- a/modules/mockk/src/jvmTest/kotlin/io/mockk/it/StaticMockkTest.kt +++ b/modules/mockk/src/jvmTest/kotlin/io/mockk/it/StaticMockkTest.kt @@ -1,5 +1,6 @@ package io.mockk.it +import io.mockk.clearStaticMockk import io.mockk.every import io.mockk.mockkStatic import io.mockk.unmockkStatic @@ -73,6 +74,19 @@ class StaticMockkTest { verify { 5 op 6 } } + @Test + fun extensionFunctionClearStaticMock() { + mockkStatic(Int::op) + + every { 5 op 6 } returns 2 + + assertEquals(2, 5 op 6) + + clearStaticMockk(Int::op) + + verify(exactly = 0) { 5 op 6 } + } + @Test fun extensionPropertyStaticMock() { mockkStatic(Int::selfOp) @@ -106,4 +120,17 @@ class StaticMockkTest { verify { 5.selfOp } } + + @Test + fun extensionPropertyClearStaticMock() { + mockkStatic(Int::selfOp) + + every { 5.selfOp } returns 2 + + assertEquals(2, 5.selfOp) + + clearStaticMockk(Int::selfOp) + + verify(exactly = 0) { 5.selfOp } + } } From 8e024f0df2eb699dfc587fa15ecf078d9a274937 Mon Sep 17 00:00:00 2001 From: Kevin Rocard Date: Wed, 3 Apr 2024 10:06:55 +0200 Subject: [PATCH 2/2] Update mockk.api --- modules/mockk/api/mockk.api | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/mockk/api/mockk.api b/modules/mockk/api/mockk.api index 8dc8f08d3..51926ce86 100644 --- a/modules/mockk/api/mockk.api +++ b/modules/mockk/api/mockk.api @@ -1,4 +1,6 @@ public final class io/mockk/JVMMockKKt { + public static final fun clearStaticMockk ([Lkotlin/reflect/KFunction;)V + public static final fun clearStaticMockk ([Lkotlin/reflect/KProperty;)V public static final fun getDeclaringKotlinFile (Lkotlin/reflect/KFunction;)Lkotlin/reflect/KClass; public static final fun mockkStatic ([Lkotlin/reflect/KFunction;)V public static final fun mockkStatic ([Lkotlin/reflect/KFunction;Lkotlin/jvm/functions/Function0;)V