In order to test the recurring work, I need to wait for a whole 15 minutes (reference) to test the recurrence and this is really not efficient. Is there a better and quicker way for developers to test this sooner?
Use WorkManager for reliable workWorkManager is intended for work that is required to run reliably even if the user navigates off a screen, the app exits, or the device restarts. For example: Sending logs or analytics to backend services. Periodically syncing application data with a server.
This method is deprecated. Call getInstance instead.
To create a set of constraints and associate it with some work, create a Constraints instance using the Contraints. Builder() and assign it to your WorkRequest. Builder() .
You can test PeriodicWorkRequest sooner than MIN_PERIODIC_INTERVAL_MILLIS which is 15 minutes.
For this, you need WorkManagerTestInitHelper
available in androidx.work.testing
.
First of all add the following dependency in the build.gradle file for your app or module:
//Current stable release is 2.3.4
androidTestImplementation "androidx.work:work-testing:2.3.4
Next, you need to use setPeriodDelayMet
method available with TestDriver
which can be used to indicate that an interval is complete and executes PeriodicWorkRequest sooner than MIN_PERIODIC_INTERVAL_MILLIS (15 minutes).
Sample code:
@Test
public void testPeriodicWork(Context context) throws Exception {
// Setup input data
Data input = new Data.Builder().put(KEY_1, 1).put(KEY_2, 2).build();
// Create periodic work request
PeriodicWorkRequest request = new PeriodicWorkRequest.Builder(MyWorker.class, 15, TimeUnit.MINUTES)
.setInputData(input)
.build();
// Enqueue periodic request
WorkManager.getInstance(context).enqueueUniquePeriodicWork(WORKER_TAG, ExistingPeriodicWorkPolicy.REPLACE, request);
// Initialize testDriver
TestDriver testDriver = WorkManagerTestInitHelper.getTestDriver();
// Tells the testing framework the period delay is met, this will execute your code in doWork() in MyWorker class
testDriver.setPeriodDelayMet(request.getId());
}
You can find more information about testing PeriodicWorkRequest at https://developer.android.com/topic/libraries/architecture/workmanager/how-to/integration-testing#periodic-work
Learn more about testing WorkManager at https://developer.android.com/reference/androidx/work/testing/WorkManagerTestInitHelper and https://developer.android.com/reference/androidx/work/testing/TestDriver
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With