Testing UserDao

This commit is contained in:
2021-09-08 02:42:24 +02:00
parent e095359301
commit f8927559b7
6 changed files with 97 additions and 2 deletions
+3
View File
@@ -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)
} }
@@ -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()
}
}
+3 -1
View File
@@ -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:_"
} }
+1 -1
View File
@@ -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)
} }
+2
View File
@@ -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