Testing UserDao
This commit is contained in:
@@ -131,4 +131,7 @@ dependencies {
|
|||||||
androidTestImplementation(Libs.mockk_android)
|
androidTestImplementation(Libs.mockk_android)
|
||||||
|
|
||||||
implementation(Libs.code_scanner)
|
implementation(Libs.code_scanner)
|
||||||
|
|
||||||
|
testImplementation(Libs.turbine)
|
||||||
|
androidTestImplementation(Libs.turbine)
|
||||||
}
|
}
|
||||||
+26
@@ -0,0 +1,26 @@
|
|||||||
|
package com.ericampire.android.androidstudycase.room
|
||||||
|
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
||||||
|
import kotlinx.coroutines.test.TestCoroutineDispatcher
|
||||||
|
import kotlinx.coroutines.test.resetMain
|
||||||
|
import kotlinx.coroutines.test.setMain
|
||||||
|
import org.junit.rules.TestWatcher
|
||||||
|
import org.junit.runner.Description
|
||||||
|
|
||||||
|
@ExperimentalCoroutinesApi
|
||||||
|
class CoroutineTestRule(
|
||||||
|
val testDispatcher: TestCoroutineDispatcher = TestCoroutineDispatcher()
|
||||||
|
) : TestWatcher() {
|
||||||
|
|
||||||
|
override fun starting(description: Description?) {
|
||||||
|
super.starting(description)
|
||||||
|
Dispatchers.setMain(testDispatcher)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun finished(description: Description?) {
|
||||||
|
super.finished(description)
|
||||||
|
Dispatchers.resetMain()
|
||||||
|
testDispatcher.cleanupTestCoroutines()
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,62 @@
|
|||||||
|
package com.ericampire.android.androidstudycase.room
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import androidx.room.Room
|
||||||
|
import androidx.test.core.app.ApplicationProvider
|
||||||
|
import androidx.test.ext.junit.runners.AndroidJUnit4
|
||||||
|
import app.cash.turbine.test
|
||||||
|
import com.ericampire.android.androidstudycase.app.room.AppDatabase
|
||||||
|
import com.ericampire.android.androidstudycase.data.room.UserDao
|
||||||
|
import com.ericampire.android.androidstudycase.util.PreviewData
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
||||||
|
import kotlinx.coroutines.test.*
|
||||||
|
import org.hamcrest.CoreMatchers.equalTo
|
||||||
|
import org.hamcrest.MatcherAssert.assertThat
|
||||||
|
import org.junit.After
|
||||||
|
import org.junit.Before
|
||||||
|
import org.junit.Test
|
||||||
|
import org.junit.runner.RunWith
|
||||||
|
import java.io.IOException
|
||||||
|
import kotlin.time.ExperimentalTime
|
||||||
|
|
||||||
|
@RunWith(AndroidJUnit4::class)
|
||||||
|
@ExperimentalCoroutinesApi
|
||||||
|
@ExperimentalTime
|
||||||
|
class UserDaoTest {
|
||||||
|
|
||||||
|
private val testDispatcher = TestCoroutineDispatcher()
|
||||||
|
private val testScope = TestCoroutineScope(testDispatcher)
|
||||||
|
|
||||||
|
private lateinit var userDao: UserDao
|
||||||
|
private lateinit var db: AppDatabase
|
||||||
|
|
||||||
|
@Before
|
||||||
|
fun setupDispatcher() {
|
||||||
|
Dispatchers.setMain(testDispatcher)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Before
|
||||||
|
fun createDb() {
|
||||||
|
val context = ApplicationProvider.getApplicationContext<Context>()
|
||||||
|
db = Room.inMemoryDatabaseBuilder(context, AppDatabase::class.java).build()
|
||||||
|
userDao = db.userDao
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun saveUser() = testScope.runBlockingTest {
|
||||||
|
userDao.save(PreviewData.User.data.first())
|
||||||
|
userDao.findAll().test {
|
||||||
|
assertThat(awaitItem(), equalTo(PreviewData.User.data.first()))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@After
|
||||||
|
@Throws(IOException::class)
|
||||||
|
fun teardown() {
|
||||||
|
db.close()
|
||||||
|
Dispatchers.resetMain()
|
||||||
|
testDispatcher.cleanupTestCoroutines()
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -148,5 +148,7 @@ object Libs {
|
|||||||
|
|
||||||
const val joda_time = "net.danlew:android.joda:2.10.9"
|
const val joda_time = "net.danlew:android.joda:2.10.9"
|
||||||
const val code_scanner = "com.budiyev.android:code-scanner:2.1.0"
|
const val code_scanner = "com.budiyev.android:code-scanner:2.1.0"
|
||||||
const val fetch = "com.mindorks.android:prdownloader:0.6.0"
|
|
||||||
|
const val turbine = "app.cash.turbine:turbine:_"
|
||||||
|
const val pr_downloader = "com.mindorks.android:prdownloader:_"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -51,5 +51,5 @@ dependencies {
|
|||||||
kapt(Libs.hilt_android_compiler)
|
kapt(Libs.hilt_android_compiler)
|
||||||
|
|
||||||
api(Libs.timber)
|
api(Libs.timber)
|
||||||
api(Libs.fetch)
|
api(Libs.pr_downloader)
|
||||||
}
|
}
|
||||||
@@ -59,3 +59,5 @@ version.io.insert-koin..koin-androidx-viewmodel=3.1.2
|
|||||||
version.io.insert-koin..koin-androidx-compose=3.1.2
|
version.io.insert-koin..koin-androidx-compose=3.1.2
|
||||||
version.io.insert-koin..koin-androidx-workmanager=3.1.2
|
version.io.insert-koin..koin-androidx-workmanager=3.1.2
|
||||||
version.com.airbnb.android..lottie-compose=4.1.0
|
version.com.airbnb.android..lottie-compose=4.1.0
|
||||||
|
version.app.cash.turbine..turbine=0.6.1
|
||||||
|
version.com.mindorks.android..prdownloader=0.6.0
|
||||||
|
|||||||
Reference in New Issue
Block a user