From 3e6b22dee45dcc10008414646acdde4ab198f745 Mon Sep 17 00:00:00 2001
From: Matthias Urhahn <matthias.urhahn@sap.com>
Date: Mon, 25 Jan 2021 14:50:05 +0100
Subject: [PATCH] Refactor DispatcherProvider to improve testing coroutine
 timing (DEV) #2190

* Adjust DispatcherProvider interface to return type `CoroutineContext`.
This is a preamble to fix a few coroutine tests that require time advancement.
We need to be able to pass the TestCoroutineScope's context to classes under test.
This can now be done using CoroutineContext.asDispatcherProvider().

* Fix compile error in test

Co-authored-by: Ralf Gehrer <ralfgehrer@users.noreply.github.com>
Co-authored-by: ralfgehrer <mail@ralfgehrer.com>
---
 .../ContactDiaryDayFragmentTest.kt            |  6 ++--
 .../ContactDiaryEditLocationsFragmentTest.kt  |  2 +-
 .../ContactDiaryEditPersonsFragmentTest.kt    |  2 +-
 .../ContactDiaryOverviewFragmentTest.kt       |  2 +-
 .../ui/main/home/HomeFragmentTest.kt          |  2 +-
 ...ardingDeltaInteroperabilityFragmentTest.kt |  4 +--
 .../OnboardingTracingFragmentTest.kt          |  2 +-
 .../SubmissionConsentFragmentTest.kt          |  3 +-
 .../SubmissionSymptomCalendarFragmentTest.kt  |  2 +-
 .../SubmissionSymptomIntroFragmentTest.kt     |  2 +-
 .../submission/SubmissionTanFragmentTest.kt   |  2 +-
 ...bmissionTestResultAvailableFragmentTest.kt |  2 +-
 ...ssionTestResultConsentGivenFragmentTest.kt |  2 +-
 .../SubmissionTestResultFragmentTest.kt       |  2 +-
 ...ubmissionTestResultNegativeFragmentTest.kt |  2 +-
 .../SubmissionYourConsentFragmentTest.kt      |  2 +-
 .../ui/tracing/TracingDetailsFragmentTest.kt  |  2 +-
 .../util/coroutine/DispatcherProvider.kt      | 12 ++++----
 .../appconfig/AppConfigProviderTest.kt        |  2 +-
 .../sources/local/LocalAppConfigSourceTest.kt |  2 +-
 .../remote/RemoteAppConfigSourceTest.kt       |  2 +-
 .../ContactDiaryEditLocationsViewModelTest.kt | 12 ++++----
 .../ContactDiaryEditPersonsViewModelTest.kt   | 12 ++++----
 .../download/DayPackageSyncToolTest.kt        |  2 +-
 .../download/HourPackageSyncToolTest.kt       |  2 +-
 .../main/MainActivityViewModelTest.kt         |  2 +-
 .../main/home/HomeFragmentViewModelTest.kt    |  2 +-
 .../DefaultExposureDetectionTrackerTest.kt    |  2 +-
 .../ExposureStateUpdateReceiverTest.kt        |  2 +-
 .../source/StatisticsProviderTest.kt          |  2 +-
 ...ilityConfigurationFragmentViewModelTest.kt |  2 +-
 .../launcher/LauncherActivityViewModelTest.kt |  2 +-
 ...tificationSettingsFragmentViewModelTest.kt |  2 +-
 .../start/SettingsFragmentViewModelTest.kt    |  2 +-
 .../consent/SubmissionConsentViewModelTest.kt |  2 +-
 .../SubmissionSymptomCalendarViewModelTest.kt |  2 +-
 ...missionSymptomIntroductionViewModelTest.kt |  2 +-
 .../tan/SubmissionTanViewModelTest.kt         |  2 +-
 ...missionTestResultAvailableViewModelTest.kt |  2 +-
 ...sionTestResultConsentGivenViewModelTest.kt |  2 +-
 ...itiveOtherWarningNoConsentViewModelTest.kt |  2 +-
 .../SubmissionYourConsentViewModelTest.kt     |  2 +-
 .../ui/DebugOptionsFragmentViewModelTest.kt   |  2 +-
 .../testhelpers/TestDispatcherProvider.kt     | 29 +++++++++++--------
 44 files changed, 79 insertions(+), 73 deletions(-)

diff --git a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/contactdiary/ContactDiaryDayFragmentTest.kt b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/contactdiary/ContactDiaryDayFragmentTest.kt
index 0cbbed399..08e05bb2a 100644
--- a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/contactdiary/ContactDiaryDayFragmentTest.kt
+++ b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/contactdiary/ContactDiaryDayFragmentTest.kt
@@ -124,14 +124,14 @@ class ContactDiaryDayFragmentTest : BaseUITest() {
     private fun setupViewModels() {
         viewModel = spyk(
             ContactDiaryDayViewModel(
-                TestDispatcherProvider,
+                TestDispatcherProvider(),
                 selectedDay
             )
         )
 
         personListViewModel = spyk(
             ContactDiaryPersonListViewModel(
-                TestDispatcherProvider,
+                TestDispatcherProvider(),
                 selectedDay,
                 contactDiaryRepository
             )
@@ -139,7 +139,7 @@ class ContactDiaryDayFragmentTest : BaseUITest() {
 
         locationListViewModel = spyk(
             ContactDiaryLocationListViewModel(
-                TestDispatcherProvider,
+                TestDispatcherProvider(),
                 selectedDay,
                 contactDiaryRepository
             )
diff --git a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/contactdiary/ContactDiaryEditLocationsFragmentTest.kt b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/contactdiary/ContactDiaryEditLocationsFragmentTest.kt
index 3bdfbe344..0b8e1dacf 100644
--- a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/contactdiary/ContactDiaryEditLocationsFragmentTest.kt
+++ b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/contactdiary/ContactDiaryEditLocationsFragmentTest.kt
@@ -46,7 +46,7 @@ class ContactDiaryEditLocationsFragmentTest : BaseUITest() {
         viewModel = spyk(
             ContactDiaryEditLocationsViewModel(
                 contactDiaryRepository,
-                TestDispatcherProvider
+                TestDispatcherProvider()
             )
         )
         setupMockViewModel(
diff --git a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/contactdiary/ContactDiaryEditPersonsFragmentTest.kt b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/contactdiary/ContactDiaryEditPersonsFragmentTest.kt
index 91b359f03..00cb0d90e 100644
--- a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/contactdiary/ContactDiaryEditPersonsFragmentTest.kt
+++ b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/contactdiary/ContactDiaryEditPersonsFragmentTest.kt
@@ -46,7 +46,7 @@ class ContactDiaryEditPersonsFragmentTest : BaseUITest() {
         viewModel = spyk(
             ContactDiaryEditPersonsViewModel(
                 contactDiaryRepository,
-                TestDispatcherProvider
+                TestDispatcherProvider()
             )
         )
         setupMockViewModel(
diff --git a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/contactdiary/ContactDiaryOverviewFragmentTest.kt b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/contactdiary/ContactDiaryOverviewFragmentTest.kt
index 5e44dad6d..eb3cd813f 100644
--- a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/contactdiary/ContactDiaryOverviewFragmentTest.kt
+++ b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/contactdiary/ContactDiaryOverviewFragmentTest.kt
@@ -53,7 +53,7 @@ class ContactDiaryOverviewFragmentTest : BaseUITest() {
         viewModel = spyk(
             ContactDiaryOverviewViewModel(
                 taskController = taskController,
-                dispatcherProvider = TestDispatcherProvider,
+                dispatcherProvider = TestDispatcherProvider(),
                 contactDiaryRepository = contactDiaryRepository,
                 riskLevelStorage = riskLevelStorage
             )
diff --git a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/main/home/HomeFragmentTest.kt b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/main/home/HomeFragmentTest.kt
index 6bc524035..7bd753280 100644
--- a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/main/home/HomeFragmentTest.kt
+++ b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/main/home/HomeFragmentTest.kt
@@ -247,7 +247,7 @@ class HomeFragmentTest : BaseUITest() {
 
     private fun homeFragmentViewModelSpy() = spyk(
         HomeFragmentViewModel(
-            dispatcherProvider = TestDispatcherProvider,
+            dispatcherProvider = TestDispatcherProvider(),
             errorResetTool = errorResetTool,
             tracingRepository = tracingRepository,
             tracingStateProviderFactory = tracingStateProviderFactory,
diff --git a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/onboarding/OnboardingDeltaInteroperabilityFragmentTest.kt b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/onboarding/OnboardingDeltaInteroperabilityFragmentTest.kt
index 829ed1551..5a3922923 100644
--- a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/onboarding/OnboardingDeltaInteroperabilityFragmentTest.kt
+++ b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/onboarding/OnboardingDeltaInteroperabilityFragmentTest.kt
@@ -13,13 +13,13 @@ import org.junit.Rule
 import org.junit.Test
 import org.junit.runner.RunWith
 import testhelpers.BaseUITest
+import testhelpers.SCREENSHOT_DELAY_TIME
 import testhelpers.Screenshot
 import testhelpers.SystemUIDemoModeRule
 import testhelpers.TestDispatcherProvider
 import testhelpers.launchFragmentInContainer2
 import tools.fastlane.screengrab.Screengrab
 import tools.fastlane.screengrab.locale.LocaleTestRule
-import testhelpers.SCREENSHOT_DELAY_TIME
 
 @RunWith(AndroidJUnit4::class)
 class OnboardingDeltaInteroperabilityFragmentTest : BaseUITest() {
@@ -41,7 +41,7 @@ class OnboardingDeltaInteroperabilityFragmentTest : BaseUITest() {
             override fun create(): OnboardingDeltaInteroperabilityFragmentViewModel =
                 OnboardingDeltaInteroperabilityFragmentViewModel(
                     interopRepo = interopRepo,
-                    dispatcherProvider = TestDispatcherProvider
+                    dispatcherProvider = TestDispatcherProvider()
                 )
         })
     }
diff --git a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/onboarding/OnboardingTracingFragmentTest.kt b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/onboarding/OnboardingTracingFragmentTest.kt
index a6be43483..2322ccc00 100644
--- a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/onboarding/OnboardingTracingFragmentTest.kt
+++ b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/onboarding/OnboardingTracingFragmentTest.kt
@@ -48,7 +48,7 @@ class OnboardingTracingFragmentTest : BaseUITest() {
             OnboardingTracingFragmentViewModel(
                 interoperabilityRepository = interopRepo,
                 tracingPermissionHelperFactory = factory,
-                dispatcherProvider = TestDispatcherProvider
+                dispatcherProvider = TestDispatcherProvider()
             )
         )
 
diff --git a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/submission/SubmissionConsentFragmentTest.kt b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/submission/SubmissionConsentFragmentTest.kt
index aa8dbed36..eacde5485 100644
--- a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/submission/SubmissionConsentFragmentTest.kt
+++ b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/submission/SubmissionConsentFragmentTest.kt
@@ -42,7 +42,8 @@ class SubmissionConsentFragmentTest : BaseUITest() {
     fun setup() {
         MockKAnnotations.init(this, relaxed = true)
         every { interoperabilityRepository.countryList } returns flowOf()
-        viewModel = SubmissionConsentViewModel(submissionRepository, interoperabilityRepository, TestDispatcherProvider)
+        viewModel =
+            SubmissionConsentViewModel(submissionRepository, interoperabilityRepository, TestDispatcherProvider())
         setupMockViewModel(object : SubmissionConsentViewModel.Factory {
             override fun create(): SubmissionConsentViewModel = viewModel
         })
diff --git a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/submission/SubmissionSymptomCalendarFragmentTest.kt b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/submission/SubmissionSymptomCalendarFragmentTest.kt
index a2ad56bdd..411960fcb 100644
--- a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/submission/SubmissionSymptomCalendarFragmentTest.kt
+++ b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/submission/SubmissionSymptomCalendarFragmentTest.kt
@@ -53,7 +53,7 @@ class SubmissionSymptomCalendarFragmentTest : BaseUITest() {
         viewModel = spyk(
             SubmissionSymptomCalendarViewModel(
                 Symptoms.Indication.POSITIVE,
-                TestDispatcherProvider,
+                TestDispatcherProvider(),
                 submissionRepository,
                 autoSubmission
             )
diff --git a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/submission/SubmissionSymptomIntroFragmentTest.kt b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/submission/SubmissionSymptomIntroFragmentTest.kt
index 4b8224920..c106e546b 100644
--- a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/submission/SubmissionSymptomIntroFragmentTest.kt
+++ b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/submission/SubmissionSymptomIntroFragmentTest.kt
@@ -53,7 +53,7 @@ class SubmissionSymptomIntroFragmentTest : BaseUITest() {
     fun setup() {
         MockKAnnotations.init(this, relaxed = true)
         viewModel =
-            spyk(SubmissionSymptomIntroductionViewModel(TestDispatcherProvider, submissionRepository, autoSubmission))
+            spyk(SubmissionSymptomIntroductionViewModel(TestDispatcherProvider(), submissionRepository, autoSubmission))
         with(viewModel) {
             every { symptomIndication } returns MutableLiveData(Symptoms.Indication.POSITIVE)
         }
diff --git a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/submission/SubmissionTanFragmentTest.kt b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/submission/SubmissionTanFragmentTest.kt
index 38331cf9e..8cf2b0f69 100644
--- a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/submission/SubmissionTanFragmentTest.kt
+++ b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/submission/SubmissionTanFragmentTest.kt
@@ -36,7 +36,7 @@ class SubmissionTanFragmentTest : BaseUITest() {
     @MockK lateinit var submissionRepository: SubmissionRepository
 
     private fun createViewModel() = SubmissionTanViewModel(
-        dispatcherProvider = TestDispatcherProvider,
+        dispatcherProvider = TestDispatcherProvider(),
         submissionRepository = submissionRepository
     )
 
diff --git a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/submission/SubmissionTestResultAvailableFragmentTest.kt b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/submission/SubmissionTestResultAvailableFragmentTest.kt
index aac51198e..9269b89a1 100644
--- a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/submission/SubmissionTestResultAvailableFragmentTest.kt
+++ b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/submission/SubmissionTestResultAvailableFragmentTest.kt
@@ -50,7 +50,7 @@ class SubmissionTestResultAvailableFragmentTest : BaseUITest() {
 
         viewModel = spyk(
             SubmissionTestResultAvailableViewModel(
-                TestDispatcherProvider,
+                TestDispatcherProvider(),
                 tekHistoryUpdaterFactory,
                 submissionRepository,
                 autoSubmission
diff --git a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/submission/SubmissionTestResultConsentGivenFragmentTest.kt b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/submission/SubmissionTestResultConsentGivenFragmentTest.kt
index 39ccea98e..506cd23eb 100644
--- a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/submission/SubmissionTestResultConsentGivenFragmentTest.kt
+++ b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/submission/SubmissionTestResultConsentGivenFragmentTest.kt
@@ -70,7 +70,7 @@ class SubmissionTestResultConsentGivenFragmentTest : BaseUITest() {
                     submissionRepository,
                     autoSubmission,
                     testResultAvailableNotificationService,
-                    TestDispatcherProvider
+                    TestDispatcherProvider()
                 )
             )
         setupMockViewModel(
diff --git a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/submission/SubmissionTestResultFragmentTest.kt b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/submission/SubmissionTestResultFragmentTest.kt
index 7305ee020..781c3f544 100644
--- a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/submission/SubmissionTestResultFragmentTest.kt
+++ b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/submission/SubmissionTestResultFragmentTest.kt
@@ -60,7 +60,7 @@ class SubmissionTestResultFragmentTest : BaseUITest() {
 
         viewModel = spyk(
             SubmissionTestResultPendingViewModel(
-                TestDispatcherProvider,
+                TestDispatcherProvider(),
                 shareTestResultNotificationService,
                 submissionRepository
             )
diff --git a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/submission/SubmissionTestResultNegativeFragmentTest.kt b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/submission/SubmissionTestResultNegativeFragmentTest.kt
index a10ad9e78..d99b017e1 100644
--- a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/submission/SubmissionTestResultNegativeFragmentTest.kt
+++ b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/submission/SubmissionTestResultNegativeFragmentTest.kt
@@ -52,7 +52,7 @@ class SubmissionTestResultNegativeFragmentTest : BaseUITest() {
 
         viewModel = spyk(
             SubmissionTestResultNegativeViewModel(
-                TestDispatcherProvider,
+                TestDispatcherProvider(),
                 submissionRepository,
                 testResultAvailableNotificationService
             )
diff --git a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/submission/SubmissionYourConsentFragmentTest.kt b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/submission/SubmissionYourConsentFragmentTest.kt
index 909eb1c5d..1312ce621 100644
--- a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/submission/SubmissionYourConsentFragmentTest.kt
+++ b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/submission/SubmissionYourConsentFragmentTest.kt
@@ -44,7 +44,7 @@ class SubmissionYourConsentFragmentTest : BaseUITest() {
         MockKAnnotations.init(this, relaxed = true)
         every { submissionRepository.hasGivenConsentToSubmission } returns flowOf()
         viewModel =
-            SubmissionYourConsentViewModel(TestDispatcherProvider, interoperabilityRepository, submissionRepository)
+            SubmissionYourConsentViewModel(TestDispatcherProvider(), interoperabilityRepository, submissionRepository)
         setupMockViewModel(object : SubmissionYourConsentViewModel.Factory {
             override fun create(): SubmissionYourConsentViewModel = viewModel
         })
diff --git a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/tracing/TracingDetailsFragmentTest.kt b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/tracing/TracingDetailsFragmentTest.kt
index e22171727..617a7cc2f 100644
--- a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/tracing/TracingDetailsFragmentTest.kt
+++ b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/tracing/TracingDetailsFragmentTest.kt
@@ -58,7 +58,7 @@ class TracingDetailsFragmentTest : BaseUITest() {
 
         viewModel = spyk(
             TracingDetailsFragmentViewModel(
-                dispatcherProvider = TestDispatcherProvider,
+                dispatcherProvider = TestDispatcherProvider(),
                 tracingStatus = tracingStatus,
                 backgroundModeStatus = backgroundModeStatus,
                 riskLevelStorage = riskLevelStorage,
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/coroutine/DispatcherProvider.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/coroutine/DispatcherProvider.kt
index 1e4abd60c..0928ccd8f 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/coroutine/DispatcherProvider.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/coroutine/DispatcherProvider.kt
@@ -1,21 +1,21 @@
 package de.rki.coronawarnapp.util.coroutine
 
-import kotlinx.coroutines.CoroutineDispatcher
 import kotlinx.coroutines.Dispatchers
+import kotlin.coroutines.CoroutineContext
 
 // Need this to improve testing
 // Can currently only replace the main-thread dispatcher.
 // https://github.com/Kotlin/kotlinx.coroutines/issues/1365
 @Suppress("PropertyName", "VariableNaming")
 interface DispatcherProvider {
-    val Default: CoroutineDispatcher
+    val Default: CoroutineContext
         get() = Dispatchers.Default
-    val Main: CoroutineDispatcher
+    val Main: CoroutineContext
         get() = Dispatchers.Main
-    val MainImmediate: CoroutineDispatcher
+    val MainImmediate: CoroutineContext
         get() = Dispatchers.Main.immediate
-    val Unconfined: CoroutineDispatcher
+    val Unconfined: CoroutineContext
         get() = Dispatchers.Unconfined
-    val IO: CoroutineDispatcher
+    val IO: CoroutineContext
         get() = Dispatchers.IO
 }
diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/appconfig/AppConfigProviderTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/appconfig/AppConfigProviderTest.kt
index e5b901e0c..d919d3119 100644
--- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/appconfig/AppConfigProviderTest.kt
+++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/appconfig/AppConfigProviderTest.kt
@@ -63,7 +63,7 @@ class AppConfigProviderTest : BaseIOTest() {
 
     private fun createInstance(scope: CoroutineScope) = AppConfigProvider(
         appConfigSource = appConfigSource,
-        dispatcherProvider = TestDispatcherProvider,
+        dispatcherProvider = TestDispatcherProvider(),
         scope = scope
     )
 
diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/appconfig/sources/local/LocalAppConfigSourceTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/appconfig/sources/local/LocalAppConfigSourceTest.kt
index 155d2f76c..9bf5c9ddf 100644
--- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/appconfig/sources/local/LocalAppConfigSourceTest.kt
+++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/appconfig/sources/local/LocalAppConfigSourceTest.kt
@@ -68,7 +68,7 @@ class LocalAppConfigSourceTest : BaseIOTest() {
     private fun createInstance() = LocalAppConfigSource(
         storage = configStorage,
         parser = configParser,
-        dispatcherProvider = TestDispatcherProvider
+        dispatcherProvider = TestDispatcherProvider()
     )
 
     @Test
diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/appconfig/sources/remote/RemoteAppConfigSourceTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/appconfig/sources/remote/RemoteAppConfigSourceTest.kt
index 94de5fb5b..79f79fa9e 100644
--- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/appconfig/sources/remote/RemoteAppConfigSourceTest.kt
+++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/appconfig/sources/remote/RemoteAppConfigSourceTest.kt
@@ -73,7 +73,7 @@ class RemoteAppConfigSourceTest : BaseIOTest() {
         server = configServer,
         storage = configStorage,
         parser = configParser,
-        dispatcherProvider = TestDispatcherProvider
+        dispatcherProvider = TestDispatcherProvider()
     )
 
     @Test
diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/contactdiary/ui/edit/ContactDiaryEditLocationsViewModelTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/contactdiary/ui/edit/ContactDiaryEditLocationsViewModelTest.kt
index ea6e55c46..a9022f4fe 100644
--- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/contactdiary/ui/edit/ContactDiaryEditLocationsViewModelTest.kt
+++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/contactdiary/ui/edit/ContactDiaryEditLocationsViewModelTest.kt
@@ -38,7 +38,7 @@ class ContactDiaryEditLocationsViewModelTest {
     @Test
     fun testOnDeleteAllLocationsClick() {
         every { contactDiaryRepository.locations } returns MutableStateFlow(locationList)
-        viewModel = ContactDiaryEditLocationsViewModel(contactDiaryRepository, TestDispatcherProvider)
+        viewModel = ContactDiaryEditLocationsViewModel(contactDiaryRepository, TestDispatcherProvider())
         viewModel.navigationEvent.observeForever { }
         viewModel.onDeleteAllLocationsClick()
         viewModel.navigationEvent.value shouldBe ContactDiaryEditLocationsViewModel.NavigationEvent.ShowDeletionConfirmationDialog
@@ -49,7 +49,7 @@ class ContactDiaryEditLocationsViewModelTest {
         coEvery { contactDiaryRepository.deleteAllLocationVisits() } just Runs
         coEvery { contactDiaryRepository.deleteAllLocations() } just Runs
         every { contactDiaryRepository.locations } returns MutableStateFlow(locationList)
-        viewModel = ContactDiaryEditLocationsViewModel(contactDiaryRepository, TestDispatcherProvider)
+        viewModel = ContactDiaryEditLocationsViewModel(contactDiaryRepository, TestDispatcherProvider())
         viewModel.onDeleteAllConfirmedClick()
         coVerify(exactly = 1) {
             contactDiaryRepository.deleteAllLocationVisits()
@@ -60,7 +60,7 @@ class ContactDiaryEditLocationsViewModelTest {
     @Test
     fun testOnEditLocationClick() {
         every { contactDiaryRepository.locations } returns MutableStateFlow(locationList)
-        viewModel = ContactDiaryEditLocationsViewModel(contactDiaryRepository, TestDispatcherProvider)
+        viewModel = ContactDiaryEditLocationsViewModel(contactDiaryRepository, TestDispatcherProvider())
         viewModel.navigationEvent.observeForever { }
         viewModel.onEditLocationClick(location)
         viewModel.navigationEvent.value shouldBe
@@ -70,7 +70,7 @@ class ContactDiaryEditLocationsViewModelTest {
     @Test
     fun testIsButtonEnabled() {
         every { contactDiaryRepository.locations } returns MutableStateFlow(locationList)
-        viewModel = ContactDiaryEditLocationsViewModel(contactDiaryRepository, TestDispatcherProvider)
+        viewModel = ContactDiaryEditLocationsViewModel(contactDiaryRepository, TestDispatcherProvider())
         viewModel.isButtonEnabled.observeForever { }
         viewModel.isButtonEnabled.value shouldBe true
     }
@@ -78,7 +78,7 @@ class ContactDiaryEditLocationsViewModelTest {
     @Test
     fun testIsButtonNotEnabledWhenListIsEmpty() {
         every { contactDiaryRepository.locations } returns MutableStateFlow(emptyList())
-        viewModel = ContactDiaryEditLocationsViewModel(contactDiaryRepository, TestDispatcherProvider)
+        viewModel = ContactDiaryEditLocationsViewModel(contactDiaryRepository, TestDispatcherProvider())
         viewModel.isButtonEnabled.observeForever { }
         viewModel.isButtonEnabled.value shouldBe false
     }
@@ -86,7 +86,7 @@ class ContactDiaryEditLocationsViewModelTest {
     @Test
     fun testLocations() {
         every { contactDiaryRepository.locations } returns MutableStateFlow(locationList)
-        viewModel = ContactDiaryEditLocationsViewModel(contactDiaryRepository, TestDispatcherProvider)
+        viewModel = ContactDiaryEditLocationsViewModel(contactDiaryRepository, TestDispatcherProvider())
         viewModel.locationsLiveData.observeForever { }
         viewModel.locationsLiveData.value shouldBe locationList
     }
diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/contactdiary/ui/edit/ContactDiaryEditPersonsViewModelTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/contactdiary/ui/edit/ContactDiaryEditPersonsViewModelTest.kt
index 183722bb6..f1a8aa1e2 100644
--- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/contactdiary/ui/edit/ContactDiaryEditPersonsViewModelTest.kt
+++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/contactdiary/ui/edit/ContactDiaryEditPersonsViewModelTest.kt
@@ -39,7 +39,7 @@ class ContactDiaryEditPersonsViewModelTest {
     @Test
     fun testOnDeleteAllLocationsClick() {
         every { contactDiaryRepository.people } returns MutableStateFlow(personList)
-        viewModel = ContactDiaryEditPersonsViewModel(contactDiaryRepository, TestDispatcherProvider)
+        viewModel = ContactDiaryEditPersonsViewModel(contactDiaryRepository, TestDispatcherProvider())
         viewModel.navigationEvent.observeForever { }
         viewModel.onDeleteAllPersonsClick()
         viewModel.navigationEvent.value shouldBe ContactDiaryEditPersonsViewModel.NavigationEvent.ShowDeletionConfirmationDialog
@@ -50,7 +50,7 @@ class ContactDiaryEditPersonsViewModelTest {
         coEvery { contactDiaryRepository.deleteAllPeople() } just Runs
         coEvery { contactDiaryRepository.deleteAllPersonEncounters() } just Runs
         every { contactDiaryRepository.people } returns MutableStateFlow(personList)
-        viewModel = ContactDiaryEditPersonsViewModel(contactDiaryRepository, TestDispatcherProvider)
+        viewModel = ContactDiaryEditPersonsViewModel(contactDiaryRepository, TestDispatcherProvider())
         viewModel.onDeleteAllConfirmedClick()
         coVerify(exactly = 1) {
             contactDiaryRepository.deleteAllPeople()
@@ -61,7 +61,7 @@ class ContactDiaryEditPersonsViewModelTest {
     @Test
     fun testOnEditLocationClick() {
         every { contactDiaryRepository.people } returns MutableStateFlow(personList)
-        viewModel = ContactDiaryEditPersonsViewModel(contactDiaryRepository, TestDispatcherProvider)
+        viewModel = ContactDiaryEditPersonsViewModel(contactDiaryRepository, TestDispatcherProvider())
         viewModel.navigationEvent.observeForever { }
         viewModel.onEditPersonClick(person)
         viewModel.navigationEvent.value shouldBe
@@ -71,7 +71,7 @@ class ContactDiaryEditPersonsViewModelTest {
     @Test
     fun testIsButtonEnabled() {
         every { contactDiaryRepository.people } returns MutableStateFlow(personList)
-        viewModel = ContactDiaryEditPersonsViewModel(contactDiaryRepository, TestDispatcherProvider)
+        viewModel = ContactDiaryEditPersonsViewModel(contactDiaryRepository, TestDispatcherProvider())
         viewModel.isButtonEnabled.observeForever { }
         viewModel.isButtonEnabled.value shouldBe true
     }
@@ -79,7 +79,7 @@ class ContactDiaryEditPersonsViewModelTest {
     @Test
     fun testIsButtonNotEnabledWhenListIsEmpty() {
         every { contactDiaryRepository.people } returns MutableStateFlow(emptyList())
-        viewModel = ContactDiaryEditPersonsViewModel(contactDiaryRepository, TestDispatcherProvider)
+        viewModel = ContactDiaryEditPersonsViewModel(contactDiaryRepository, TestDispatcherProvider())
         viewModel.isButtonEnabled.observeForever { }
         viewModel.isButtonEnabled.value shouldBe false
     }
@@ -87,7 +87,7 @@ class ContactDiaryEditPersonsViewModelTest {
     @Test
     fun testLocations() {
         every { contactDiaryRepository.people } returns MutableStateFlow(personList)
-        viewModel = ContactDiaryEditPersonsViewModel(contactDiaryRepository, TestDispatcherProvider)
+        viewModel = ContactDiaryEditPersonsViewModel(contactDiaryRepository, TestDispatcherProvider())
         viewModel.personsLiveData.observeForever { }
         viewModel.personsLiveData.value shouldBe personList
     }
diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/diagnosiskeys/download/DayPackageSyncToolTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/diagnosiskeys/download/DayPackageSyncToolTest.kt
index 598e8408c..17c498967 100644
--- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/diagnosiskeys/download/DayPackageSyncToolTest.kt
+++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/diagnosiskeys/download/DayPackageSyncToolTest.kt
@@ -39,7 +39,7 @@ class DayPackageSyncToolTest : CommonSyncToolTest() {
         keyCache = keyCache,
         downloadTool = downloadTool,
         timeStamper = timeStamper,
-        dispatcherProvider = TestDispatcherProvider,
+        dispatcherProvider = TestDispatcherProvider(),
         configProvider = configProvider
     )
 
diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/diagnosiskeys/download/HourPackageSyncToolTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/diagnosiskeys/download/HourPackageSyncToolTest.kt
index 5e50eeaed..0a58b9578 100644
--- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/diagnosiskeys/download/HourPackageSyncToolTest.kt
+++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/diagnosiskeys/download/HourPackageSyncToolTest.kt
@@ -41,7 +41,7 @@ class HourPackageSyncToolTest : CommonSyncToolTest() {
         downloadTool = downloadTool,
         timeStamper = timeStamper,
         configProvider = configProvider,
-        dispatcherProvider = TestDispatcherProvider
+        dispatcherProvider = TestDispatcherProvider()
     )
 
     @Test
diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/main/MainActivityViewModelTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/main/MainActivityViewModelTest.kt
index 871d43b35..10efd2034 100644
--- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/main/MainActivityViewModelTest.kt
+++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/main/MainActivityViewModelTest.kt
@@ -38,7 +38,7 @@ class MainActivityViewModelTest : BaseTest() {
     }
 
     private fun createInstance(): MainActivityViewModel = MainActivityViewModel(
-        dispatcherProvider = TestDispatcherProvider,
+        dispatcherProvider = TestDispatcherProvider(),
         environmentSetup = environmentSetup,
         backgroundModeStatus = backgroundModeStatus
     )
diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/main/home/HomeFragmentViewModelTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/main/home/HomeFragmentViewModelTest.kt
index 701dcece0..f0361f63d 100644
--- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/main/home/HomeFragmentViewModelTest.kt
+++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/main/home/HomeFragmentViewModelTest.kt
@@ -81,7 +81,7 @@ class HomeFragmentViewModelTest : BaseTest() {
     }
 
     private fun createInstance(): HomeFragmentViewModel = HomeFragmentViewModel(
-        dispatcherProvider = TestDispatcherProvider,
+        dispatcherProvider = TestDispatcherProvider(),
         errorResetTool = errorResetTool,
         tracingStatus = generalTracingStatus,
         tracingRepository = tracingRepository,
diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/nearby/modules/detectiontracker/DefaultExposureDetectionTrackerTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/nearby/modules/detectiontracker/DefaultExposureDetectionTrackerTest.kt
index 9012e23cf..823cee90f 100644
--- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/nearby/modules/detectiontracker/DefaultExposureDetectionTrackerTest.kt
+++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/nearby/modules/detectiontracker/DefaultExposureDetectionTrackerTest.kt
@@ -56,7 +56,7 @@ class DefaultExposureDetectionTrackerTest : BaseTest() {
 
     private fun createInstance(scope: CoroutineScope) = DefaultExposureDetectionTracker(
         scope = scope,
-        dispatcherProvider = TestDispatcherProvider,
+        dispatcherProvider = TestDispatcherProvider(),
         storage = storage,
         timeStamper = timeStamper,
         appConfigProvider = configProvider
diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/receiver/ExposureStateUpdateReceiverTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/receiver/ExposureStateUpdateReceiverTest.kt
index 4bd4076ca..8294b3454 100644
--- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/receiver/ExposureStateUpdateReceiverTest.kt
+++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/receiver/ExposureStateUpdateReceiverTest.kt
@@ -62,7 +62,7 @@ class ExposureStateUpdateReceiverTest : BaseTest() {
         val broadcastReceiverInjector = AndroidInjector<Any> {
             it as ExposureStateUpdateReceiver
             it.exposureDetectionTracker = exposureDetectionTracker
-            it.dispatcherProvider = TestDispatcherProvider
+            it.dispatcherProvider = TestDispatcherProvider()
             it.scope = scope
             it.workManager = workManager
         }
diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/statistics/source/StatisticsProviderTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/statistics/source/StatisticsProviderTest.kt
index dbb619dab..13db68023 100644
--- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/statistics/source/StatisticsProviderTest.kt
+++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/statistics/source/StatisticsProviderTest.kt
@@ -66,7 +66,7 @@ class StatisticsProviderTest : BaseTest() {
         localCache = localCache,
         parser = parser,
         foregroundState = foregroundState,
-        dispatcherProvider = TestDispatcherProvider
+        dispatcherProvider = TestDispatcherProvider()
     )
 
     @Test
diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/interoperability/InteroperabilityConfigurationFragmentViewModelTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/interoperability/InteroperabilityConfigurationFragmentViewModelTest.kt
index 87c6c0f00..45a8b3e1e 100644
--- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/interoperability/InteroperabilityConfigurationFragmentViewModelTest.kt
+++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/interoperability/InteroperabilityConfigurationFragmentViewModelTest.kt
@@ -29,7 +29,7 @@ class InteroperabilityConfigurationFragmentViewModelTest {
     }
 
     private fun createViewModel() =
-        InteroperabilityConfigurationFragmentViewModel(interoperabilityRepository, TestDispatcherProvider)
+        InteroperabilityConfigurationFragmentViewModel(interoperabilityRepository, TestDispatcherProvider())
 
     @Test
     fun `viewmodel returns interop repo countryList`() {
diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/launcher/LauncherActivityViewModelTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/launcher/LauncherActivityViewModelTest.kt
index 343f7b960..63b120314 100644
--- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/launcher/LauncherActivityViewModelTest.kt
+++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/launcher/LauncherActivityViewModelTest.kt
@@ -34,7 +34,7 @@ class LauncherActivityViewModelTest {
 
     private fun createViewModel() = LauncherActivityViewModel(
         updateChecker = updateChecker,
-        dispatcherProvider = TestDispatcherProvider
+        dispatcherProvider = TestDispatcherProvider()
     )
 
     @Test
diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/settings/notification/NotificationSettingsFragmentViewModelTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/settings/notification/NotificationSettingsFragmentViewModelTest.kt
index a1bcbcdf4..031ff0e1d 100644
--- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/settings/notification/NotificationSettingsFragmentViewModelTest.kt
+++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/settings/notification/NotificationSettingsFragmentViewModelTest.kt
@@ -43,7 +43,7 @@ class NotificationSettingsFragmentViewModelTest : BaseTest() {
 
     private fun createInstance(): NotificationSettingsFragmentViewModel =
         NotificationSettingsFragmentViewModel(
-            dispatcherProvider = TestDispatcherProvider,
+            dispatcherProvider = TestDispatcherProvider(),
             notificationSettings = notificationSettings
         )
 
diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/settings/start/SettingsFragmentViewModelTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/settings/start/SettingsFragmentViewModelTest.kt
index 115d261ec..7b48a9b49 100644
--- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/settings/start/SettingsFragmentViewModelTest.kt
+++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/settings/start/SettingsFragmentViewModelTest.kt
@@ -46,7 +46,7 @@ class SettingsFragmentViewModelTest : BaseTest() {
     }
 
     private fun createInstance(): SettingsFragmentViewModel = SettingsFragmentViewModel(
-        dispatcherProvider = TestDispatcherProvider,
+        dispatcherProvider = TestDispatcherProvider(),
         tracingStatus = tracingStatus,
         backgroundModeStatus = backgroundModeStatus,
         notificationSettings = notificationSettings
diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/submission/qrcode/consent/SubmissionConsentViewModelTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/submission/qrcode/consent/SubmissionConsentViewModelTest.kt
index 151651436..585c1c37f 100644
--- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/submission/qrcode/consent/SubmissionConsentViewModelTest.kt
+++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/submission/qrcode/consent/SubmissionConsentViewModelTest.kt
@@ -36,7 +36,7 @@ class SubmissionConsentViewModelTest {
         viewModel = SubmissionConsentViewModel(
             submissionRepository,
             interoperabilityRepository,
-            dispatcherProvider = TestDispatcherProvider
+            dispatcherProvider = TestDispatcherProvider()
         )
     }
 
diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/submission/symptoms/calendar/SubmissionSymptomCalendarViewModelTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/submission/symptoms/calendar/SubmissionSymptomCalendarViewModelTest.kt
index 591b391e4..1a07365dc 100644
--- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/submission/symptoms/calendar/SubmissionSymptomCalendarViewModelTest.kt
+++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/submission/symptoms/calendar/SubmissionSymptomCalendarViewModelTest.kt
@@ -53,7 +53,7 @@ class SubmissionSymptomCalendarViewModelTest : BaseTest() {
     private fun createViewModel(indication: Symptoms.Indication = Symptoms.Indication.POSITIVE) =
         SubmissionSymptomCalendarViewModel(
             symptomIndication = indication,
-            dispatcherProvider = TestDispatcherProvider,
+            dispatcherProvider = TestDispatcherProvider(),
             submissionRepository = submissionRepository,
             autoSubmission = autoSubmission
         )
diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/submission/symptoms/introduction/SubmissionSymptomIntroductionViewModelTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/submission/symptoms/introduction/SubmissionSymptomIntroductionViewModelTest.kt
index f3e1ee087..af78444e2 100644
--- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/submission/symptoms/introduction/SubmissionSymptomIntroductionViewModelTest.kt
+++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/submission/symptoms/introduction/SubmissionSymptomIntroductionViewModelTest.kt
@@ -47,7 +47,7 @@ class SubmissionSymptomIntroductionViewModelTest : BaseTest() {
     }
 
     private fun createViewModel() = SubmissionSymptomIntroductionViewModel(
-        dispatcherProvider = TestDispatcherProvider,
+        dispatcherProvider = TestDispatcherProvider(),
         submissionRepository = submissionRepository,
         autoSubmission = autoSubmission
     )
diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/submission/tan/SubmissionTanViewModelTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/submission/tan/SubmissionTanViewModelTest.kt
index 8d0f77ea5..22e7c02b1 100644
--- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/submission/tan/SubmissionTanViewModelTest.kt
+++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/submission/tan/SubmissionTanViewModelTest.kt
@@ -18,7 +18,7 @@ class SubmissionTanViewModelTest : BaseTest() {
     @MockK lateinit var submissionRepository: SubmissionRepository
 
     private fun createInstance() = SubmissionTanViewModel(
-        dispatcherProvider = TestDispatcherProvider,
+        dispatcherProvider = TestDispatcherProvider(),
         submissionRepository = submissionRepository
     )
 
diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/submission/testavailable/SubmissionTestResultAvailableViewModelTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/submission/testavailable/SubmissionTestResultAvailableViewModelTest.kt
index 1341d2771..9be0ec3c9 100644
--- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/submission/testavailable/SubmissionTestResultAvailableViewModelTest.kt
+++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/submission/testavailable/SubmissionTestResultAvailableViewModelTest.kt
@@ -46,7 +46,7 @@ class SubmissionTestResultAvailableViewModelTest : BaseTest() {
 
     private fun createViewModel(): SubmissionTestResultAvailableViewModel = SubmissionTestResultAvailableViewModel(
         submissionRepository = submissionRepository,
-        dispatcherProvider = TestDispatcherProvider,
+        dispatcherProvider = TestDispatcherProvider(),
         tekHistoryUpdaterFactory = tekHistoryUpdaterFactory,
         autoSubmission = autoSubmission
     )
diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/submission/testresult/SubmissionTestResultConsentGivenViewModelTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/submission/testresult/SubmissionTestResultConsentGivenViewModelTest.kt
index 9cf860c68..c84ea408d 100644
--- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/submission/testresult/SubmissionTestResultConsentGivenViewModelTest.kt
+++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/submission/testresult/SubmissionTestResultConsentGivenViewModelTest.kt
@@ -29,7 +29,7 @@ class SubmissionTestResultConsentGivenViewModelTest : BaseTest() {
 
     private fun createViewModel() = SubmissionTestResultConsentGivenViewModel(
         submissionRepository = submissionRepository,
-        dispatcherProvider = TestDispatcherProvider,
+        dispatcherProvider = TestDispatcherProvider(),
         autoSubmission = autoSubmission,
         testResultAvailableNotificationService = testResultAvailableNotificationService
     )
diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/submission/warnothers/SubmissionResultPositiveOtherWarningNoConsentViewModelTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/submission/warnothers/SubmissionResultPositiveOtherWarningNoConsentViewModelTest.kt
index b9a3cd2ba..d87ada61d 100644
--- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/submission/warnothers/SubmissionResultPositiveOtherWarningNoConsentViewModelTest.kt
+++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/submission/warnothers/SubmissionResultPositiveOtherWarningNoConsentViewModelTest.kt
@@ -47,7 +47,7 @@ class SubmissionResultPositiveOtherWarningNoConsentViewModelTest : BaseTest() {
     }
 
     private fun createViewModel() = SubmissionResultPositiveOtherWarningNoConsentViewModel(
-        dispatcherProvider = TestDispatcherProvider,
+        dispatcherProvider = TestDispatcherProvider(),
         tekHistoryUpdaterFactory = tekHistoryUpdaterFactory,
         autoSubmission = autoSubmission,
         enfClient = enfClient,
diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/submission/yourconsent/SubmissionYourConsentViewModelTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/submission/yourconsent/SubmissionYourConsentViewModelTest.kt
index 184fae9da..d5a70f44c 100644
--- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/submission/yourconsent/SubmissionYourConsentViewModelTest.kt
+++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/submission/yourconsent/SubmissionYourConsentViewModelTest.kt
@@ -43,7 +43,7 @@ class SubmissionYourConsentViewModelTest : BaseTest() {
     private fun createViewModel(): SubmissionYourConsentViewModel = SubmissionYourConsentViewModel(
         interoperabilityRepository = interoperabilityRepository,
         submissionRepository = submissionRepository,
-        dispatcherProvider = TestDispatcherProvider
+        dispatcherProvider = TestDispatcherProvider()
     )
 
     @AfterEach
diff --git a/Corona-Warn-App/src/testDeviceForTesters/java/de/rki/coronawarnapp/test/debugoptions/ui/DebugOptionsFragmentViewModelTest.kt b/Corona-Warn-App/src/testDeviceForTesters/java/de/rki/coronawarnapp/test/debugoptions/ui/DebugOptionsFragmentViewModelTest.kt
index 4883ed904..2e38ca455 100644
--- a/Corona-Warn-App/src/testDeviceForTesters/java/de/rki/coronawarnapp/test/debugoptions/ui/DebugOptionsFragmentViewModelTest.kt
+++ b/Corona-Warn-App/src/testDeviceForTesters/java/de/rki/coronawarnapp/test/debugoptions/ui/DebugOptionsFragmentViewModelTest.kt
@@ -56,7 +56,7 @@ class DebugOptionsFragmentViewModelTest : BaseTest() {
 
     private fun createViewModel(): DebugOptionsFragmentViewModel = DebugOptionsFragmentViewModel(
         envSetup = environmentSetup,
-        dispatcherProvider = TestDispatcherProvider
+        dispatcherProvider = TestDispatcherProvider()
     )
 
     @Test
diff --git a/Corona-Warn-App/src/testShared/java/testhelpers/TestDispatcherProvider.kt b/Corona-Warn-App/src/testShared/java/testhelpers/TestDispatcherProvider.kt
index 9b338acc7..9aff497b9 100644
--- a/Corona-Warn-App/src/testShared/java/testhelpers/TestDispatcherProvider.kt
+++ b/Corona-Warn-App/src/testShared/java/testhelpers/TestDispatcherProvider.kt
@@ -1,18 +1,23 @@
 package testhelpers
 
 import de.rki.coronawarnapp.util.coroutine.DispatcherProvider
-import kotlinx.coroutines.CoroutineDispatcher
+import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.Dispatchers
+import kotlin.coroutines.CoroutineContext
 
-object TestDispatcherProvider : DispatcherProvider {
-    override val Default: CoroutineDispatcher
-        get() = Dispatchers.Unconfined
-    override val Main: CoroutineDispatcher
-        get() = Dispatchers.Unconfined
-    override val MainImmediate: CoroutineDispatcher
-        get() = Dispatchers.Unconfined
-    override val Unconfined: CoroutineDispatcher
-        get() = Dispatchers.Unconfined
-    override val IO: CoroutineDispatcher
-        get() = Dispatchers.Unconfined
+class TestDispatcherProvider(private val context: CoroutineContext? = null) : DispatcherProvider {
+    override val Default: CoroutineContext
+        get() = context ?: Dispatchers.Unconfined
+    override val Main: CoroutineContext
+        get() = context ?: Dispatchers.Unconfined
+    override val MainImmediate: CoroutineContext
+        get() = context ?: Dispatchers.Unconfined
+    override val Unconfined: CoroutineContext
+        get() = context ?: Dispatchers.Unconfined
+    override val IO: CoroutineContext
+        get() = context ?: Dispatchers.Unconfined
 }
+
+fun CoroutineScope.asDispatcherProvider() = this.coroutineContext.asDispatcherProvider()
+
+fun CoroutineContext.asDispatcherProvider() = TestDispatcherProvider(context = this)
-- 
GitLab