Aleksey Kornienko
01/31/2019, 5:06 PMclass AnalyticsTest {
private lateinit var context: Context
@Before
fun setUp() {
context = InstrumentationRegistry.getInstrumentation().targetContext
}
@After
fun tearDown() {
}
}
The error I get
java.lang.IllegalStateException: No instrumentation registered! Must run under a registering instrumentation.
It doesn’t work only in multiplatform projectplugins {
id("com.android.library")
id("org.jetbrains.kotlin.multiplatform")
}
group = "com.devtodev"
version = "2.0"
android {
compileSdkVersion(28)
defaultConfig {
minSdkVersion(16)
targetSdkVersion(28)
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
useLibrary("android.test.runner")
useLibrary("android.test.base")
useLibrary("android.test.mock")
}
buildTypes {
getByName("release") {
isMinifyEnabled = false
proguardFiles(getDefaultProguardFile("proguard-android.txt"), "<http://proguard-rules.pro|proguard-rules.pro>")
}
}
sourceSets {
val main by getting {
setRoot("src/androidMain")
}
val test by getting {
setRoot("src/androidTest")
}
}
packagingOptions {
exclude("META-INF/*.kotlin_module")
}
}
kotlin {
android {
}
iosX64 {
binaries {
framework {
embedBitcode("disable")
}
}
}
iosArm32 {
binaries.framework()
}
iosArm64 {
binaries.framework()
}
sourceSets {
fun dependants(name: String, targets: Set<String>) {
val main = maybeCreate("${name}Main")
val test = maybeCreate("${name}Test")
for (target in targets) {
maybeCreate("${target}Main").dependsOn(main)
maybeCreate("${target}Test").dependsOn(test)
}
}
val commonMain by getting {
dependencies {
implementation(kotlin("stdlib-common"))
}
}
val commonTest by getting {
dependencies {
implementation(kotlin("test-common"))
implementation(kotlin("test-annotations-common"))
}
}
val androidMain by getting {
dependencies {
implementation("org.jetbrains.kotlin:kotlin-stdlib")
}
}
val androidTest by getting {
}
val ios = setOf("iosX64", "iosArm32", "iosArm64")
dependants("ios", ios)
}
}
dependencies {
androidTestImplementation("junit:junit:4.12")
androidTestImplementation("org.jetbrains.kotlin:kotlin-test")
androidTestImplementation("org.jetbrains.kotlin:kotlin-test-junit")
androidTestImplementation("androidx.test:runner:1.1.1")
androidTestImplementation("androidx.test:rules:1.1.1")
androidTestImplementation("androidx.test.espresso:espresso-core:3.1.1")
}
yshrsmz
02/01/2019, 1:26 AMAleksey Kornienko
02/01/2019, 9:14 AMyshrsmz
02/01/2019, 9:30 AMandroidTest
in mpp module means androidTest
in ordinary android module.
But I can run androidTest
with android classes if I use Robolectric, so I assume androidTest
in mpp module runs on jvm, thus we need Robolectric if we want to use that InstrumentationRegistry
Aleksey Kornienko
02/01/2019, 10:16 AMribesg
02/01/2019, 10:26 AMAleksey Kornienko
02/01/2019, 10:40 AMsourceSets {
val main by getting {
setRoot("src/androidMain")
}
val test by getting {
setRoot("src/androidTest")
}
getByName("androidTest").java.srcDirs("src/androidTest/kotlin")
}
ribesg
02/01/2019, 11:05 AM