From 2fba18bc7ea557797b8ac5600c94bbc4e901ee47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B4=94=E9=B2=81=E6=AD=A3?= <13780741225@163.com> Date: Thu, 10 Sep 2026 10:50:19 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E7=A1=AE=E5=AE=9A=E6=80=A7=E6=B5=8B?= =?UTF-8?q?=E8=AF=95=E6=94=B9=E4=B8=BA=E6=96=AD=E8=A8=80=E7=BB=9D=E5=AF=B9?= =?UTF-8?q?=E6=97=B6=E9=97=B4=E6=88=B3=EF=BC=8C=E5=B9=B6=E8=A1=A5=E5=85=85?= =?UTF-8?q?=E8=AE=BE=E5=A4=87=E5=88=B7=E6=96=B0=E8=AF=AD=E4=B9=89=E8=AF=B4?= =?UTF-8?q?=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ringhealth/data/mock/MockRingDeviceRepository.kt | 6 ++++++ .../ringhealth/data/mock/MockDataProviderTest.kt | 5 +++++ 2 files changed, 11 insertions(+) diff --git a/app/src/main/java/com/placeholder/ringhealth/data/mock/MockRingDeviceRepository.kt b/app/src/main/java/com/placeholder/ringhealth/data/mock/MockRingDeviceRepository.kt index aa917c1..c4f1b3e 100644 --- a/app/src/main/java/com/placeholder/ringhealth/data/mock/MockRingDeviceRepository.kt +++ b/app/src/main/java/com/placeholder/ringhealth/data/mock/MockRingDeviceRepository.kt @@ -11,6 +11,12 @@ import kotlinx.coroutines.flow.update /** * Mock 设备仓库。开关状态保存在内存中,进程重启后重置(阶段一不做持久化)。 + * + * 注意 [refreshDeviceState] 的语义:它以 **suspend 函数正常返回**表示刷新完成, + * 而**不是**靠发射新状态。`MutableStateFlow` 会抑制相等值,M1 的设备状态是常量, + * 因此刷新不会产生任何可观察的发射。调用方要展示刷新反馈,应当 + * `launch { repo.refreshDeviceState(); isRefreshing = false }`, + * **不要**写成「等待下一个不同的 deviceState 发射」(那样在 M1 会永远等不到)。 */ class MockRingDeviceRepository( private val provider: MockDataProvider = MockDataProvider(), diff --git a/app/src/test/java/com/placeholder/ringhealth/data/mock/MockDataProviderTest.kt b/app/src/test/java/com/placeholder/ringhealth/data/mock/MockDataProviderTest.kt index 106bdba..ac96e31 100644 --- a/app/src/test/java/com/placeholder/ringhealth/data/mock/MockDataProviderTest.kt +++ b/app/src/test/java/com/placeholder/ringhealth/data/mock/MockDataProviderTest.kt @@ -45,6 +45,11 @@ class MockDataProviderTest { assertTrue(first.all { it.value > 40.0 && it.value < 180.0 }) // 时间戳须严格递增(“每点间隔一天”倒推,最早的在最前) assertTrue(first.zipWithNext().all { (a, b) -> b.timestamp > a.timestamp }) + // 断言绝对时间戳,让注入的时钟真正成为被测对象:若退回 System.currentTimeMillis(), + // 这两条会立刻失败(ledger R17 / R20)。只比较 first == second 是不够的 —— + // 两次相邻调用几乎总落在同一毫秒,那时去掉时钟注入测试照样通过。 + assertEquals(FIXED_NOW, first.last().timestamp) + assertEquals(FIXED_NOW - 6L * 24 * 60 * 60 * 1000, first.first().timestamp) } @Test