I am trying to create an Android test class in Kotlin that deals with Bitmap
but I can't manage to run the test because of these errors. They only occur for any test class in androidTest but the simple JVM tests in test run without problem.
First, this is how my test class looks like
import android.graphics.Bitmap
import androidx.test.core.app.ApplicationProvider
import org.junit.jupiter.api.Assertions.assertTrue
class RoundImageTest {
@org.junit.jupiter.api.Test
fun imagesRatio() {
// test with square images
val squareBitmap: Bitmap = Bitmap.createBitmap(
164, 164, Bitmap.Config.ARGB_8888
)
assertTrue(squareBitmap.height == squareBitmap.width)
}
}
Following the instructions specified here I have this in my project's build.gradle
dependencies {
classpath 'com.android.tools.build:gradle:4.0.1'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath 'eu.appcom.gradle:android-versioning:1.0.2'
classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1'
classpath "io.gitlab.arturbosch.detekt:detekt-gradle-plugin:1.10.0"
classpath "org.jlleitschuh.gradle:ktlint-gradle:9.2.1"
classpath("de.mannodermaus.gradle.plugins:android-junit5:1.6.2.0")
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
and this in my application's build.gradle
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'eu.appcom.gradle.android-versioning'
apply plugin: 'maven'
apply plugin: 'kotlin-kapt'
def keystorePropertiesFile = rootProject.file("keystore.properties")
def keystoreProperties = new Properties()
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
android {
compileSdkVersion 29
defaultConfig {
applicationId "com.example.demoapp"
minSdkVersion 21
targetSdkVersion 29
versionCode versioning.getVersionCode()
versionName versioning.getVersionName()
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables.useSupportLibrary = true
javaCompileOptions {
annotationProcessorOptions {
arguments = [
"room.schemaLocation": "$projectDir/schemas" . toString(),
"room.incremental": "true",
"room.expandProjection": "true"
]
}
}
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
testInstrumentationRunnerArgument("runnerBuilder", "de.mannodermaus.junit5.AndroidJUnit5Builder")
}
testBuildType "alpha"
sourceSets {
main.java.srcDirs += 'src/main/kotlin'
androidTest.assets.srcDirs += files("$projectDir/schemas" . toString())
}
signingConfigs {
debug {
keyAlias keystoreProperties['debugKeyAlias']
keyPassword keystoreProperties['debugKeyPassword']
storeFile file(rootDir.getCanonicalPath() + '/' + keystoreProperties['debugKeyStore'])
storePassword keystoreProperties['debugStorePassword']
}
release {
keyAlias keystoreProperties['releaseKeyAlias']
keyPassword keystoreProperties['releaseKeyPassword']
storeFile file(rootDir.getCanonicalPath() + '/' + keystoreProperties['releaseKeyStore'])
storePassword keystoreProperties['releaseStorePassword']
}
}
buildTypes {
alpha {
applicationIdSuffix ".alpha"
debuggable true
minifyEnabled false
signingConfig signingConfigs.debug
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
release {
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
testOptions {
unitTests {
includeAndroidResources = true
}
}
packagingOptions {
exclude 'META-INF/atomicfu.kotlin_module'
exclude "META-INF/LICENSE*"
}
kotlinOptions {
jvmTarget = "1.8"
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
// Kotlin
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
// AndroidX
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'androidx.core:core-ktx:1.3.1'
implementation 'androidx.constraintlayout:constraintlayout:2.0.1'
testImplementation 'androidx.test:core:1.3.0'
// ACRA
implementation "ch.acra:acra-mail:$acra_version"
implementation "ch.acra:acra-notification:$acra_version"
// Room components
implementation "androidx.room:room-runtime:$room_version"
implementation "androidx.room:room-ktx:$room_version"
kapt "androidx.room:room-compiler:$room_version"
androidTestImplementation "androidx.room:room-testing:$room_version"
// Lifecycle components
implementation "androidx.lifecycle:lifecycle-extensions:$lifecycle_version"
implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version"
androidTestImplementation "androidx.arch.core:core-testing:$androidx_version"
// ViewModel Kotlin support
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version"
// Co-routines
api "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutines"
// Material UI
implementation "com.google.android.material:material:$material_version"
// LeakCanary
debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.2'
alphaImplementation 'com.squareup.leakcanary:leakcanary-android:2.2'
// Navigation
implementation 'androidx.navigation:navigation-fragment-ktx:2.3.0'
implementation 'androidx.navigation:navigation-ui-ktx:2.3.0'
// Junit
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.6.2'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.6.2'
androidTestImplementation "androidx.test:runner:1.3.0"
androidTestImplementation 'androidx.test.ext:junit:1.1.2'
androidTestImplementation 'androidx.test.ext:junit-ktx:1.1.2'
androidTestImplementation "de.mannodermaus.junit5:android-test-core:1.2.0"
androidTestRuntimeOnly "de.mannodermaus.junit5:android-test-runner:1.2.0"
// Espresso
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
androidTestImplementation 'androidx.test:rules:1.3.0'
}
Now, when I try to run the test, this is what the Build Output shows me
Task :app:compileAlphaAndroidTestKotlin FAILED
e: RoundImageTest.kt: (5, 18): Unresolved reference: jupiter
e: RoundImageTest.kt: (9, 16): Unresolved reference: jupiter
e: RoundImageTest.kt: (16, 9): Unresolved reference: assertTrue
e: RoundImageTest.kt: (23, 9): Unresolved reference: assertTrue
e: RoundImageTest.kt: (30, 9): Unresolved reference: assertTrue
Apparently, what I had to do was change
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.6.2'
to
androidTestImplementation 'org.junit.jupiter:junit-jupiter-api:5.6.2'