diff --git a/composeApp/build.gradle.kts b/composeApp/build.gradle.kts index fc35c8a..abe9072 100644 --- a/composeApp/build.gradle.kts +++ b/composeApp/build.gradle.kts @@ -116,6 +116,26 @@ kotlin { implementation(libs.ktor.client.mock) implementation(libs.kotlinx.coroutines.test) } + val androidUnitTest by getting { + dependencies { + implementation(libs.kotlin.testJunit) + implementation(libs.junit) + implementation(libs.robolectric) + implementation(libs.mockk) + implementation(libs.kotlinx.coroutines.test) + implementation(libs.androidx.test.core) + implementation(libs.androidx.test.core.ktx) + implementation(libs.androidx.testExt.junit) + } + } + val androidInstrumentedTest by getting { + dependencies { + implementation(libs.androidx.testExt.junit) + implementation(libs.androidx.espresso.core) + implementation(libs.androidx.test.runner) + implementation(libs.mockk.android) + } + } } } @@ -129,10 +149,12 @@ android { targetSdk = libs.versions.android.targetSdk.get().toInt() versionCode = 1 versionName = "1.0" + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } packaging { resources { excludes += "/META-INF/{AL2.0,LGPL2.1}" + excludes += "/META-INF/LICENSE*" } } buildTypes { @@ -147,6 +169,10 @@ android { sourceCompatibility = JavaVersion.VERSION_11 targetCompatibility = JavaVersion.VERSION_11 } + testOptions { + unitTests.isIncludeAndroidResources = true + unitTests.isReturnDefaultValues = true + } } dependencies { diff --git a/composeApp/src/androidInstrumentedTest/kotlin/com/tt/honeyDue/CanaryInstrumentedTest.kt b/composeApp/src/androidInstrumentedTest/kotlin/com/tt/honeyDue/CanaryInstrumentedTest.kt new file mode 100644 index 0000000..5765511 --- /dev/null +++ b/composeApp/src/androidInstrumentedTest/kotlin/com/tt/honeyDue/CanaryInstrumentedTest.kt @@ -0,0 +1,17 @@ +package com.tt.honeyDue + +import androidx.test.core.app.ApplicationProvider +import androidx.test.ext.junit.runners.AndroidJUnit4 +import org.junit.Assert.assertTrue +import org.junit.Test +import org.junit.runner.RunWith + +@RunWith(AndroidJUnit4::class) +class CanaryInstrumentedTest { + + @Test + fun app_context_available() { + val appContext = ApplicationProvider.getApplicationContext() + assertTrue(appContext.packageName.startsWith("com.tt.honeyDue")) + } +} diff --git a/composeApp/src/androidUnitTest/kotlin/com/tt/honeyDue/CanaryUnitTest.kt b/composeApp/src/androidUnitTest/kotlin/com/tt/honeyDue/CanaryUnitTest.kt new file mode 100644 index 0000000..2c6dbe7 --- /dev/null +++ b/composeApp/src/androidUnitTest/kotlin/com/tt/honeyDue/CanaryUnitTest.kt @@ -0,0 +1,22 @@ +package com.tt.honeyDue + +import org.junit.Assert.assertEquals +import org.junit.Assert.assertTrue +import org.junit.Test +import org.junit.runner.RunWith +import org.robolectric.RobolectricTestRunner + +@RunWith(RobolectricTestRunner::class) +class CanaryUnitTest { + + @Test + fun arithmetic_sanity() { + assertEquals(2, 1 + 1) + } + + @Test + fun robolectric_android_runtime_available() { + val appContext = androidx.test.core.app.ApplicationProvider.getApplicationContext() + assertTrue(appContext.packageName.startsWith("com.tt.honeyDue")) + } +} diff --git a/composeApp/src/androidUnitTest/resources/robolectric.properties b/composeApp/src/androidUnitTest/resources/robolectric.properties new file mode 100644 index 0000000..979b5ee --- /dev/null +++ b/composeApp/src/androidUnitTest/resources/robolectric.properties @@ -0,0 +1 @@ +sdk=34 diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 11a7bdc..cbd70f1 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -22,6 +22,10 @@ ktor = "3.3.1" firebase-bom = "34.0.0" google-services = "4.4.3" billing = "7.1.1" +robolectric = "4.14.1" +mockk = "1.13.13" +androidx-test-runner = "1.6.2" +androidx-test-core = "1.6.1" [libraries] kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin" } @@ -58,6 +62,14 @@ coil-network-ktor3 = { module = "io.coil-kt.coil3:coil-network-ktor3", version.r firebase-bom = { module = "com.google.firebase:firebase-bom", version.ref = "firebase-bom" } firebase-messaging = { module = "com.google.firebase:firebase-messaging-ktx" } google-billing = { module = "com.android.billingclient:billing-ktx", version.ref = "billing" } +robolectric = { module = "org.robolectric:robolectric", version.ref = "robolectric" } +mockk = { module = "io.mockk:mockk", version.ref = "mockk" } +mockk-android = { module = "io.mockk:mockk-android", version.ref = "mockk" } +androidx-test-runner = { module = "androidx.test:runner", version.ref = "androidx-test-runner" } +androidx-test-core = { module = "androidx.test:core", version.ref = "androidx-test-core" } +androidx-test-core-ktx = { module = "androidx.test:core-ktx", version.ref = "androidx-test-core" } +compose-ui-test-junit4-android = { module = "androidx.compose.ui:ui-test-junit4-android", version = "1.7.5" } +compose-ui-test-manifest = { module = "androidx.compose.ui:ui-test-manifest", version = "1.7.5" } [plugins] androidApplication = { id = "com.android.application", version.ref = "agp" }