我正在跟踪this link为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))
}
我不确定断言是否是测试此流程的好方法,还是有更好的替代方法来验证工作人员状态?