Период тестированияi c работа, WorkInfo иногда приводит к состоянию `Running` - PullRequest
0 голосов
/ 18 июня 2020

Я следую по этой ссылке , чтобы написать тесты для 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))
    }

Я не уверен, является ли утверждение хорошим способом проверить этот поток или есть ли лучшие альтернативы для проверки рабочих состояний?

...