外观
如何给一个设备控制模块写有价值的单元测试?
标准回答
先列出模块对外承诺的行为,再准备输入与可控依赖,执行操作后检查可观察结果。测试应该说明“需求被满足了”,而不是把实现里的每一行再写一遍。
- 按 Arrange、Act、Assert 组织:准备、执行、断言;一个测试聚焦一个明确行为。
- 把时钟、网络、设备接口作为可替换依赖,避免真实时间和随机硬件状态干扰。
- 修复缺陷前先写能复现它的用例,修复后该用例应稳定通过。
通俗例子
需求规定温度只能是 16–30℃。测试 15、16、30、31 四个边界,再让 Fake 设备返回超时,验证页面状态变为失败、没有误报成功。Fake 只模拟外部设备,真实业务判断仍执行。
深入解释
**Fake 到底替换什么:**Fake 是一个简化、可控制的依赖实现,例如固定返回设备超时。它替换不稳定的外部设备,真正要验证的温度校验与状态转换仍运行。
**怎样判断测试有价值:**把实现故意改成接受越界温度,边界测试应该失败;把失败回包当成成功,状态测试也应该失败。只检查“方法被调用一次”往往不能证明业务结果正确。
易混淆点
测试通过只说明已有断言成立;断言错了、遗漏边界或把业务本身 Mock 掉,都可能是假安心。
参考资料
内容来源
- Android · AI Agent 知识手册 · 原条目
job-A10