MocKMP Setup
Setup MocKMP with the official plugin
The MocKMP Gradle plugin configures your project to use the Kotlin Symbol Processor using a workaround to a current KSP limitation.
Once KSP properly supports hierarchical Multiplatform, this plugin will apply MocKMP "normally".
plugins {
kotlin("multiplatform")
id("org.kodein.mock.mockmp") version "1.17.0" (1)
}
repositories {
mavenCentral()
}
kotlin {
jvm()
ios()
js(IR) {
browser()
}
sourceSets {
val commonTest by getting {
dependencies {
implementation(kotlin("test"))
}
}
}
}
mockmp {
// OPTIONAL!
usesHelper = true (2)
// REQUIRED!
installWorkaround() (3)
}
1 | Applying the MocKMP plugin. |
2 | Requesting the optional test-helper dependency |
3 | Must be called after the kotlin configuration and must be the last line of the mockmp block. |
The plugin takes care of:
-
Applying the KSP Gradle plugin
-
Declaring the MocKMP KSP dependency
-
Declaring the MocKMP runtime dependencies
-
Applying the incomplete multiplatform support workaround:
-
Using Android if the Android plugin is applied
-
Using the JVM otherwise
-
If you are not using the same Kotlin version than the plugin, then you’ll need to manually apply the KSP plugin before applying MocKMP:
|
Setup MocKMP manually with KSP and its incomplete multiplatform support
KSP for multiplatform is in beta, and KSP for common tests is not supported (yet).
To have IDEA completion, here’s a trick that you can use (in fact, that’s what the MocKMP plugin does):
plugins {
kotlin("multiplatform")
id("com.google.devtools.ksp") version "1.9.22-1.0.17" (1)
}
repositories {
mavenCentral()
}
kotlin {
jvm()
ios()
js(IR) {
browser()
}
sourceSets {
val commonTest by getting {
dependencies {
implementation(kotlin("test"))
implementation("org.kodein.mock:mockmp-runtime:1.17.0") (2)
// OPTIONAL!
implementation("org.kodein.mock:mockmp-test-helper:1.17.0") (2)
}
kotlin.srcDir("build/generated/ksp/jvm/jvmTest/kotlin") (3)
}
}
}
dependencies {
"kspJvmTest"("org.kodein.mock:mockmp-processor:1.17.0") (4)
}
tasks.withType<org.jetbrains.kotlin.gradle.dsl.KotlinCompile<*>>().all {
if (name.startsWith("compileTestKotlin")) {
dependsOn("kspTestKotlinJvm") (5)
}
}
1 | Applying the KSP plugin. |
2 | Adding the dependencies to the MocKMP runtime and the optional test helper. |
3 | Use KSP generated JVM sources on all targets. |
4 | Apply the processor only on the JVM target. |
5 | Make compilation of all targets dependant on the JVM KSP processor. |
Generated classes & functions visibility
By default, every generated class or function is internal
.
If you wish to have it public
(because you need to share it across modules), then you can configure the processor to generate public classes & functions:
// When using the MocKMP plugin:
mockmp {
public = true
}
// When using KSP directly:
ksp {
arg("org.kodein.mock.visibility", "public")
}