diff --git a/tests/robotests/src/com/android/customization/model/picker/settings/data/repository/ColorContrastSectionRepositoryTest.kt b/tests/robotests/src/com/android/customization/model/picker/settings/data/repository/ColorContrastSectionRepositoryTest.kt
index 54b7c6e..fb9477a 100644
--- a/tests/robotests/src/com/android/customization/model/picker/settings/data/repository/ColorContrastSectionRepositoryTest.kt
+++ b/tests/robotests/src/com/android/customization/model/picker/settings/data/repository/ColorContrastSectionRepositoryTest.kt
@@ -24,8 +24,10 @@
 import dagger.hilt.android.testing.HiltAndroidTest
 import javax.inject.Inject
 import kotlinx.coroutines.ExperimentalCoroutinesApi
+import kotlinx.coroutines.flow.toList
 import kotlinx.coroutines.launch
-import kotlinx.coroutines.test.runBlockingTest
+import kotlinx.coroutines.test.UnconfinedTestDispatcher
+import kotlinx.coroutines.test.runTest
 import org.junit.Before
 import org.junit.Rule
 import org.junit.Test
@@ -53,18 +55,21 @@
 
     @OptIn(ExperimentalCoroutinesApi::class)
     @Test
-    fun contrastFlowEmitsValues() = runBlockingTest {
+    fun contrastFlowEmitsValues() = runTest {
         val nextContrastValues = listOf(0.5f, 0.7f, 0.8f)
         // Set up a flow to collect all contrast values
         val flowCollector = mutableListOf<Float>()
-        // Start collecting values from the flow
-        val job = launch { underTest.contrast.collect { flowCollector.add(it) } }
+        // Start collecting values from the flow, using an unconfined dispatcher to start collecting
+        // from the flow right away (rather than explicitly calling `runCurrent`)
+        // See https://developer.android.com/kotlin/flow/test#continuous-collection
+        backgroundScope.launch(UnconfinedTestDispatcher(testScheduler)) {
+            underTest.contrast.toList(flowCollector)
+        }
 
         nextContrastValues.forEach { uiModeManager.setContrast(it) }
 
         // Ignore the first contrast value from constructing the repository
         val collectedValues = flowCollector.drop(1)
         assertThat(collectedValues).containsExactlyElementsIn(nextContrastValues)
-        job.cancel()
     }
 }
diff --git a/tests/robotests/src/com/android/customization/model/picker/settings/domain/interactor/ColorContrastSectionInteractorTest.kt b/tests/robotests/src/com/android/customization/model/picker/settings/domain/interactor/ColorContrastSectionInteractorTest.kt
index 2319eed..afa6427 100644
--- a/tests/robotests/src/com/android/customization/model/picker/settings/domain/interactor/ColorContrastSectionInteractorTest.kt
+++ b/tests/robotests/src/com/android/customization/model/picker/settings/domain/interactor/ColorContrastSectionInteractorTest.kt
@@ -19,12 +19,12 @@
 import androidx.test.filters.SmallTest
 import com.android.customization.picker.settings.domain.interactor.ColorContrastSectionInteractor
 import com.android.wallpaper.testing.FakeUiModeManager
+import com.google.common.truth.Truth.assertThat
 import dagger.hilt.android.testing.HiltAndroidRule
 import dagger.hilt.android.testing.HiltAndroidTest
 import javax.inject.Inject
 import kotlinx.coroutines.flow.first
-import kotlinx.coroutines.test.runBlockingTest
-import org.junit.Assert.assertEquals
+import kotlinx.coroutines.test.runTest
 import org.junit.Before
 import org.junit.Rule
 import org.junit.Test
@@ -46,12 +46,12 @@
     }
 
     @Test
-    fun contrastEmitCorrectValuesFromRepository() = runBlockingTest {
+    fun contrastEmitCorrectValuesFromRepository() = runTest {
         val expectedContrast = 1.5f
         uiModeManager.setContrast(expectedContrast)
 
         val result = interactor.contrast.first()
 
-        assertEquals(expectedContrast, result)
+        assertThat(result).isEqualTo(expectedContrast)
     }
 }
diff --git a/tests/robotests/src/com/android/customization/model/picker/settings/ui/viewmodel/ColorContrastSectionViewModelTest.kt b/tests/robotests/src/com/android/customization/model/picker/settings/ui/viewmodel/ColorContrastSectionViewModelTest.kt
index c06f8a3..bf02273 100644
--- a/tests/robotests/src/com/android/customization/model/picker/settings/ui/viewmodel/ColorContrastSectionViewModelTest.kt
+++ b/tests/robotests/src/com/android/customization/model/picker/settings/ui/viewmodel/ColorContrastSectionViewModelTest.kt
@@ -27,7 +27,7 @@
 import javax.inject.Inject
 import kotlinx.coroutines.flow.collect
 import kotlinx.coroutines.flow.first
-import kotlinx.coroutines.test.runBlockingTest
+import kotlinx.coroutines.test.runTest
 import org.junit.Assert.assertEquals
 import org.junit.Before
 import org.junit.Rule
@@ -52,7 +52,7 @@
     }
 
     @Test
-    fun summaryEmitsCorrectDataValueForStandard() = runBlockingTest {
+    fun summaryEmitsCorrectDataValueForStandard() = runTest {
         uiModeManager.setContrast(ColorContrastSectionViewModel.ContrastValue.STANDARD.value)
         val expected =
             ColorContrastSectionDataViewModel(
@@ -66,7 +66,7 @@
     }
 
     @Test
-    fun summaryEmitsCorrectDataValueForMedium() = runBlockingTest {
+    fun summaryEmitsCorrectDataValueForMedium() = runTest {
         uiModeManager.setContrast(ColorContrastSectionViewModel.ContrastValue.MEDIUM.value)
         val expected =
             ColorContrastSectionDataViewModel(
@@ -80,7 +80,7 @@
     }
 
     @Test
-    fun summaryEmitsCorrectDataValueForHigh() = runBlockingTest {
+    fun summaryEmitsCorrectDataValueForHigh() = runTest {
         uiModeManager.setContrast(ColorContrastSectionViewModel.ContrastValue.HIGH.value)
         val expected =
             ColorContrastSectionDataViewModel(
@@ -94,7 +94,7 @@
     }
 
     @Test(expected = IllegalArgumentException::class)
-    fun summaryThrowsIllegalArgumentExceptionForInvalidValue() = runBlockingTest {
+    fun summaryThrowsIllegalArgumentExceptionForInvalidValue() = runTest {
         uiModeManager.setContrast(999f)
 
         viewModel.summary.collect() // This should throw an IllegalArgumentException
