# 使持久行为有意且可测试

> 验证浏览器游戏保存的内容、重置的内容，以及当存储的数据丢失、过时或在会话之间发生更改时它的行为方式。

- URL: https://oneshotgems.ai/zh-Hans/topics/testing-game-save-state
- 类别: 游戏开发者指南
- 类型: 指南
- 更新日期: 2026年10月5日

存档状态测试首先要明确产品规则：哪些值在重新加载后应保留，哪些值应在新一局开始时重置？最高分可以保留，临时强化效果则可以不保留。没有明确规则，测试人员就无法判断记住的值是功能设计还是陈旧数据。先写下一份简短的存档约定，再在接近真实玩家使用的条件下测试保留、重置和恢复。

## 记录哪些值会跨越各个边界

为重新开始一局、重新加载页面和开启新的浏览器会话制作一张小表。例如：重新开始时重置当前分数；个人最高分在重新加载后仍保留；新会话开始时当前关卡回到第一关。明确记录每个值以及它需要跨越的边界。这样就能发现意外保留（例如重新开始后仍显示上一局的计时器）或意外丢失（例如重新加载后最高分消失）。

## 探针缺失、格式错误和旧值

如果能控制测试环境，依次测试没有存储键的首次访问、有效的已保存分数，以及空值或格式错误的值。健壮的游戏应采用明确设定的默认处理，而不是显示 NaN、锁住菜单或在开始游戏前崩溃。如果分数有上限或必须是数字，就在读取数据的边界测试负数、异常大的数值和非数字输入。这些是韧性检查，并不意味着玩家能通过产品界面编辑存储数据。

## 常见问题

**游戏在会话之间应该保存什么？** 这取决于预期的体验。明确说明设置、最佳分数、进度和正在进行的运行是否持续存在，然后在重新加载和新会话边界时测试每个设置。

**localStorage是否保证可用？** 任何存储选择均不应被视为无条件保证。妥善处理丢失或无法使用的数据，并验证游戏在支持的环境中的后备行为。

## 跟随好奇心探索

- [测试游戏状态转换](https://oneshotgems.ai/zh-Hans/topics/testing-game-state-transitions): 映射浏览器游戏的开始、播放、暂停、获胜和失败状态，然后测试每个转换和应忽略的输入。
- [小型游戏的回归测试循环](https://oneshotgems.ai/zh-Hans/topics/game-regression-testing): 使用专注于机制、得分、重新启动和附近边缘情况的简短回归检查表来保护修改后的游戏循环。
- [为浏览器游戏的本地存储数据添加版本管理](https://oneshotgems.ai/zh-Hans/topics/local-storage-game-versioning): 确定如何读取旧版本游戏保存的数据，并在使用已知格式的数据前完成迁移。

## 延伸阅读

- [MDN 本地存储](https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage)

---
规范页面: https://oneshotgems.ai/zh-Hans/topics/testing-game-save-state
