Skip to content

Commit f9272a7

Browse files
committed
This is why we use DI...
1 parent eccf78e commit f9272a7

File tree

2 files changed

+27
-8
lines changed

2 files changed

+27
-8
lines changed

app/src/androidTestMock/java/com/example/android/architecture/blueprints/todoapp/tasks/TasksActivityTest.kt

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import androidx.test.espresso.matcher.ViewMatchers.withId
3333
import androidx.test.espresso.matcher.ViewMatchers.withText
3434
import androidx.test.ext.junit.runners.AndroidJUnit4
3535
import androidx.test.filters.LargeTest
36+
import androidx.test.internal.runner.junit4.statement.UiThreadStatement.runOnUiThread
3637
import com.example.android.architecture.blueprints.todoapp.R
3738
import com.example.android.architecture.blueprints.todoapp.R.string
3839
import com.example.android.architecture.blueprints.todoapp.ServiceLocator
@@ -67,13 +68,19 @@ class TasksActivityTest {
6768

6869
@Before
6970
fun init() {
70-
repository = ServiceLocator.provideTasksRepository(getApplicationContext())
71-
repository.deleteAllTasksBlocking()
71+
// Run on UI thread to make sure the same instance of the SL is used.
72+
runOnUiThread {
73+
ServiceLocator.createDataBase(getApplicationContext(), inMemory = true)
74+
repository = ServiceLocator.provideTasksRepository(getApplicationContext())
75+
repository.deleteAllTasksBlocking()
76+
}
7277
}
7378

7479
@After
7580
fun reset() {
76-
ServiceLocator.resetRepository()
81+
runOnUiThread {
82+
ServiceLocator.resetRepository()
83+
}
7784
}
7885

7986
/**

app/src/mock/java/com/example/android/architecture/blueprints/todoapp/ServiceLocator.kt

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -55,11 +55,23 @@ object ServiceLocator {
5555
return TasksLocalDataSource(database.taskDao())
5656
}
5757

58-
private fun createDataBase(context: Context): ToDoDatabase {
59-
val result = Room.databaseBuilder(
60-
context.applicationContext,
61-
ToDoDatabase::class.java, "Tasks.db"
62-
).build()
58+
@VisibleForTesting
59+
fun createDataBase(
60+
context: Context,
61+
inMemory: Boolean = false
62+
): ToDoDatabase {
63+
val result = if (inMemory) {
64+
// Use a faster in-memory database for tests
65+
Room.inMemoryDatabaseBuilder(context.applicationContext, ToDoDatabase::class.java)
66+
.allowMainThreadQueries()
67+
.build()
68+
} else {
69+
// Real database using SQLite
70+
Room.databaseBuilder(
71+
context.applicationContext,
72+
ToDoDatabase::class.java, "Tasks.db"
73+
).build()
74+
}
6375
database = result
6476
return result
6577
}

0 commit comments

Comments
 (0)