docs: 让 R17 的时钟注入真正可测 + 记录刷新语义(ledger R20)
- MockDataProviderTest 增加两条绝对时间戳断言;只比较 first==second 时, 两次相邻调用几乎总在同一毫秒内,去掉时钟注入测试照样通过 - MockRingDeviceRepository 类级 KDoc 写明「刷新以 suspend 返回表示完成, 不靠发射新状态」,避免调用方写成等待下一个不同发射而在 M1 永久挂起
This commit is contained in:
@@ -1413,6 +1413,11 @@ class MockDataProviderTest {
|
|||||||
assertTrue(first.all { it.value > 40.0 && it.value < 180.0 })
|
assertTrue(first.all { it.value > 40.0 && it.value < 180.0 })
|
||||||
// 时间戳须严格递增(“每点间隔一天”倒推,最早的在最前)
|
// 时间戳须严格递增(“每点间隔一天”倒推,最早的在最前)
|
||||||
assertTrue(first.zipWithNext().all { (a, b) -> b.timestamp > a.timestamp })
|
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
|
@Test
|
||||||
@@ -1622,6 +1627,12 @@ import kotlinx.coroutines.flow.update
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Mock 设备仓库。开关状态保存在内存中,进程重启后重置(阶段一不做持久化)。
|
* Mock 设备仓库。开关状态保存在内存中,进程重启后重置(阶段一不做持久化)。
|
||||||
|
*
|
||||||
|
* 注意 [refreshDeviceState] 的语义:它以 **suspend 函数正常返回**表示刷新完成,
|
||||||
|
* 而**不是**靠发射新状态。`MutableStateFlow` 会抑制相等值,M1 的设备状态是常量,
|
||||||
|
* 因此刷新不会产生任何可观察的发射。调用方要展示刷新反馈,应当
|
||||||
|
* `launch { repo.refreshDeviceState(); isRefreshing = false }`,
|
||||||
|
* **不要**写成「等待下一个不同的 deviceState 发射」(那样在 M1 会永远等不到)。
|
||||||
*/
|
*/
|
||||||
class MockRingDeviceRepository(
|
class MockRingDeviceRepository(
|
||||||
private val provider: MockDataProvider = MockDataProvider(),
|
private val provider: MockDataProvider = MockDataProvider(),
|
||||||
|
|||||||
Reference in New Issue
Block a user