Kotlin Multiplatformの開発をする際に、 Spek を使ってテストを書こうとすると、最初は良かったものの後で困ることがあります、というか困ることがありましたのでその備忘録です。
具体的には以下のような状況です
- Kotlin Multiplatformを使って、Android/iOS向けのライブラリを作る
- Source Setは
commonMain
commonTest
jvmMain
jvmTest
iosMain
iosTest
の6つ -
commonTest
でテストを書くためにSpekを入れる -
jvmTest
もSpekでDSLが提供されているのでSpekを使う -
iosTest
はSpekでDSLが提供されていないのでSpekが使えない - さらに、
iosTest
内でSpekに依存しないテストを書いても、Gradle taskのiosTest
がcompileTestKotlinIos
を呼んでその中でcommonTest
のテストをしようとするため、そこでSpekのライブラリが参照できずにtaskが失敗してしまう
やりたいこととしては iosTest
内に書かれたテストがテストできればそれでいいので、なんとかGradle taskの iosTest
が実行された時に commonTest
をスルーできないか模索していたのですが、とりあえずこんな感じでbuild.gradleを設定してやるとスルーできました
kotlin {
sourceSets {
commonMain {
...
}
commonTest {
...
}
iosMain {
...
}
iosTest {
dependsOn.remove(sourceSets.commonTest) // <- これ
}
}
}
正直本当にこれで大丈夫なのか自信がないですが、今のところこれで iosTest
内のテストもできるようになりました。