top of page

一款业余游戏有 1000 多个测试——是浪费吗?

作家相片: Marcel Dütscher
Marcel Dütscher
7月2日
讀畢需時 2 分鐘

我们的项目现在有远超一千个自动化测试:服务器端约 990 个,Unity 客户端约 120 个。对一个家庭项目来说,这听起来有点小题大做。恰恰相反——原因如下。


测试是我们的第二位开发者。作为一个独立项目,没有人会在代码评审时说:“等等,这会搞坏合成。”测试就是这位同事。每一个游戏机制——配方、氧气、饥饿、生物行为、世界密码——都有随每次改动运行的测试。无所畏惧地重构,才是真正的收获。


快到不让人烦。要花一刻钟的测试,没有人会去跑。所以我们的 CI 关卡分两个阶段:拉取请求检查用快速测试,三分钟多一点就跑完;完整而较慢的测试集随后再运行。这样既让开发循环保持轻快,又不损失覆盖率。


测试 Unity 是另一个话题。客户端逻辑很难在运行中的引擎里测试。我们的办法是:客户端的核心逻辑放在一个独立的库里,不依赖 Unity 运行——我们像测试普通代码一样无头地测试它。只有真正需要引擎的部分,才作为 EditMode/PlayMode 测试运行。


警告就是错误。我们的 CI 用“warnaserror”构建:每一条编译器警告都会让构建失败。听起来很较真,但它避免了那个“警告坟场”——那条真正重要的警告,最终会淹没在里面。


坦率的结论:写测试大概要花五分之一的开发时间。但每一个修好的功能都会一直是好的——而对于一个靠下班后的晚上才活起来的项目来说,没有什么比确信周末的功能没有搞坏周二的功能更有价值了。

最新文章

查看全部
为什么新版本叫 2026.7.19,而不是 0.9.2 🗓️

今天更新的人,会从 0.9.1 版本一下跳到 2026.7.19。这看起来像是笔误,其实是一个刻意的决定:我们改变了版本号方案,从“语义化”版本改成了基于日期的版本(年.月.序号)。原因如下。 旧方案回答的是没人问的问题。语义化版本(0.9.1、1.2.3 ……)来自软件库的世界。在那里它很棒:第一个数字承诺“不会破坏任何东西”,第二个承诺“只有新增”,第三个承诺“只有修复”。而游戏不对任何人做这

 
 
大扫除:我们终于把 GitHub 的缓存用对了 🧹

在上一篇技术文章里,我们测量了构建和检查流水线到底花了什么:不是钱,而是等待时间和存储空间。那篇文章的结尾是“清理工作已经计划好,但还没完成”。结果比预想的快:从今天中午起,它已经进入主分支了。下面是数字。 先看结果。我们仓库的缓存用量,从 63 个条目共 5.32 GB,降到了 13 个条目共 2.46 GB。以前每个拉取请求都要跑的 C# 安全分析,现在在那里只需要 4 秒,而不是 4 分半,

 
 
每月一千次构建,而且一次都不花钱 ⚙️

先更正一件事。这篇文章的第一版声称,我们的 GitHub 构建分钟数用完了,被迫升级到 Pro 账号。这是错的,而且只要看一眼文档就能弄清楚:对公开仓库来说,GitHub 的构建分钟数是免费的。产物和缓存也一样。我们的仓库从五月底起就是公开的,所以我们从来没有为任何一分钟付过钱,以后也不会。与其悄悄改掉文字,我们宁愿重写一遍,告诉你们测量到底显示了什么。结果比错误的版本有趣得多。 先猜测,后查看。

 
 

留言


這篇文章不開放留言。請連絡網站負責人了解更多。
bottom of page