Testing UserDao
This commit is contained in:
@@ -131,4 +131,7 @@ dependencies {
|
||||
androidTestImplementation(Libs.mockk_android)
|
||||
|
||||
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 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)
|
||||
|
||||
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-workmanager=3.1.2
|
||||
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