diff --git a/modules/mockk/api/mockk.api b/modules/mockk/api/mockk.api index 8dc8f08d..51926ce8 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 diff --git a/modules/mockk/src/jvmMain/kotlin/io/mockk/MockK.kt b/modules/mockk/src/jvmMain/kotlin/io/mockk/MockK.kt index 53b00c7f..9e895200 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 5d8e1091..8eee8985 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 } + } }