Я следую по этой ссылке , чтобы написать тесты для android Worker, в которых я утверждаю, что WorkState поставлен в очередь, но он периодически дает сбой с
java.lang.AssertionError:
Expected: is <ENQUEUED>
but: was <RUNNING>
Я вижу журналы тестов, которые, кажется, предполагают, что работа с Success
уже завершена. так что утверждение должно сработать правильно?
D/WM-WorkConstraintsTrack: Constraints met for ef9d4cf7-a154-40a5-836b-0f168adb6898
D/WM-WorkConstraintsTrack: Constraints met for ef9d4cf7-a154-40a5-836b-0f168adb6898
D/WM-ConstraintTrkngWrkr: Constraints met for delegate <package_name>.<worker_class>
D/WM-Processor: Work ef9d4cf7-a154-40a5-836b-0f168adb6898 is already enqueued for processing
D/WM-WorkerWrapper: androidx.work.impl.workers.ConstraintTrackingWorker returned a Success {mOutputData=Data {}} result.
I/WM-WorkerWrapper: Worker result SUCCESS for Work [ id=ef9d4cf7-a154-40a5-836b-0f168adb6898, tags={ e8c3f53728904635964412c75923d217, <package_name>.<worker_class> } ]
D/WM-Processor: Processor ef9d4cf7-a154-40a5-836b-0f168adb6898 executed; reschedule = false
E/TestRunner: failed: testPeriodicFormSubmission_WithSuccess(<package_name>.<worker_class>)
E/TestRunner: ----- begin exception -----
E/TestRunner: java.lang.AssertionError:
Expected: is <ENQUEUED>
but: was <RUNNING>
Моя тестовая функция действительно проста,
@Test
fun testPeriodicFormSubmission_WithSuccess() {
// Mock the result
every { submissionHelper.uploadForms() } returns UploadResult.FULL_SUCCESS
// Enqueue the periodic work request.
val operation = workManager.enqueue(request)
// Tell the testing framework that the constraints are met.
testDriver.setAllConstraintsMet(request.id)
testDriver.setPeriodDelayMet(request.id)
// Wait for result
operation.result.get()
// Get work info and assert
val workInfo = workManager.getWorkInfoById(request.id).get()
verify(exactly = 1) { submissionHelper.uploadForms() }
Assert.assertThat(workInfo.state, CoreMatchers.`is`(WorkInfo.State.ENQUEUED))
}
Я не уверен, является ли утверждение хорошим способом проверить этот поток или есть ли лучшие альтернативы для проверки рабочих состояний?