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)
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()
}
}