diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 893eed36..1c27ad9f 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -73,4 +73,5 @@ dependencies { androidTestImplementation(deps.test.androidXSspresso) addUnitTest() + testImplementation(deps.koin.testJunit4) } diff --git a/app/src/main/java/com/hoc/flowmvi/App.kt b/app/src/main/java/com/hoc/flowmvi/App.kt index 0c26257d..2061ce47 100644 --- a/app/src/main/java/com/hoc/flowmvi/App.kt +++ b/app/src/main/java/com/hoc/flowmvi/App.kt @@ -15,6 +15,19 @@ import org.koin.core.context.startKoin import org.koin.core.logger.Level import kotlin.time.ExperimentalTime +@FlowPreview +@ExperimentalCoroutinesApi +@ExperimentalStdlibApi +@ExperimentalTime +val allModules = listOf( + coreModule, + dataModule, + domainModule, + mainModule, + addModule, + searchModule, +) + @Suppress("unused") @ExperimentalStdlibApi @FlowPreview @@ -29,14 +42,7 @@ class App : Application() { androidLogger(if (BuildConfig.DEBUG) Level.DEBUG else Level.NONE) - modules( - coreModule, - dataModule, - domainModule, - mainModule, - addModule, - searchModule, - ) + modules(allModules) } } } diff --git a/app/src/test/java/com/hoc/flowmvi/ExampleUnitTest.kt b/app/src/test/java/com/hoc/flowmvi/ExampleUnitTest.kt index 018f2743..50a9efaf 100644 --- a/app/src/test/java/com/hoc/flowmvi/ExampleUnitTest.kt +++ b/app/src/test/java/com/hoc/flowmvi/ExampleUnitTest.kt @@ -1,16 +1,34 @@ package com.hoc.flowmvi +import androidx.lifecycle.SavedStateHandle +import io.mockk.every +import io.mockk.mockkClass +import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.FlowPreview +import org.junit.Rule +import org.koin.test.check.checkKoinModules +import org.koin.test.mock.MockProviderRule import kotlin.test.Test -import kotlin.test.assertEquals +import kotlin.time.ExperimentalTime -/** - * Example local unit test, which will execute on the development machine (host). - * - * See [testing documentation](http://d.android.com/tools/testing). - */ +@ExperimentalStdlibApi +@FlowPreview +@ExperimentalCoroutinesApi +@ExperimentalTime class ExampleUnitTest { + @get:Rule + val mockProvider = MockProviderRule.create { clazz -> + mockkClass(clazz).also { o -> + if (clazz == SavedStateHandle::class) { + every { (o as SavedStateHandle).get(any()) } returns null + } + } + } + @Test - fun addition_isCorrect() { - assertEquals(4, 2 + 2) + fun verifyKoinApp() { + checkKoinModules(allModules) { + withInstance() + } } } diff --git a/buildSrc/src/main/kotlin/deps.kt b/buildSrc/src/main/kotlin/deps.kt index 8e5d9670..661aa602 100644 --- a/buildSrc/src/main/kotlin/deps.kt +++ b/buildSrc/src/main/kotlin/deps.kt @@ -59,10 +59,11 @@ object deps { } object koin { - private const val version = "3.0.2" + private const val version = "3.1.3" const val core = "io.insert-koin:koin-core:$version" const val android = "io.insert-koin:koin-android:$version" + const val testJunit4 = "io.insert-koin:koin-test-junit4:$version" } const val coil = "io.coil-kt:coil:1.2.1" diff --git a/feature-add/src/main/java/com/hoc/flowmvi/ui/add/AddActivity.kt b/feature-add/src/main/java/com/hoc/flowmvi/ui/add/AddActivity.kt index fb9b34df..b33fc592 100644 --- a/feature-add/src/main/java/com/hoc/flowmvi/ui/add/AddActivity.kt +++ b/feature-add/src/main/java/com/hoc/flowmvi/ui/add/AddActivity.kt @@ -24,11 +24,11 @@ import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.merge import kotlinx.coroutines.flow.onEach -import org.koin.androidx.viewmodel.ext.android.stateViewModel +import org.koin.androidx.viewmodel.ext.android.viewModel @ExperimentalCoroutinesApi class AddActivity : AppCompatActivity(R.layout.activity_add) { - private val addVM by stateViewModel() + private val addVM by viewModel() private val addBinding by viewBinding() override fun onCreate(savedInstanceState: Bundle?) {