为什么要测试
在用户发现问题之前捕获错误。
为什么要测试 是 CoddyKit 上的免费 Lua Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Lua Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Lua Academy 课程共包含 4 节课。
为什么要测试
自动化测试是用于检查代码的代码。与其手动运行程序并目测输出,不如编写一些小断言,由测试运行器为您验证。
对于 Lua,最流行的框架是 busted。它提供了清晰的语法,用于描述行为并报告通过或失败的结果。
没有测试的代价
没有测试,每次修改都像是在赌博。您修复了一个错误,却可能悄悄破坏另一个错误。随着代码库不断扩大,人工检查将无法做到彻底。
测试就像安全网。重构时,测试套件全部通过就说明行为得到了保留。
第一个测试文件
busted 测试文件通常位于 spec/ 文件夹中,并以 _spec.lua 结尾。在其中描述要测试的内容。
下面是一个最小但有用的示例,用于检查简单算术是否正常工作。
describe("math", function()
it("adds numbers", function()
assert.are.equal(4, 2 + 2)
end)
end)运行 busted
使用 LuaRocks 安装 busted:luarocks install busted。然后在项目根目录中运行 busted 命令。
它会查找以 _spec.lua 结尾的文件,运行每个 it 块,并为每个通过的测试打印一个点,为每个失败的测试打印一个 F。
测试您自己的模块
真正的测试会使用 require 导入被测模块。您调用其中的函数,并对结果进行断言。
假设您有一个 calculator.lua 模块,它返回一个由函数组成的表。
local calc = require("calculator")
describe("calculator", function()
it("multiplies", function()
assert.are.equal(6, calc.mul(2, 3))
end)
end)测试也是文档
编写良好的测试也可以作为实时文档。新开发者可以阅读规范文件,准确理解函数应该如何运行。
由于描述是普通字符串,因此读起来几乎就像句子一样:“计算器执行乘法”。
describe("string utils", function()
it("trims whitespace", function()
assert.are.equal("hi", utils.trim(" hi "))
end)
end)快速反馈循环
测试真正的力量在于速度。运行完整测试套件只需几秒钟,比手动点击应用程序快得多。
开发时,您甚至可以在监视模式下运行 busted,或指定单个文件,从而在修改过程中持续获得快速反馈。
-- run only one file
-- busted spec/calculator_spec.lua捕获回归问题
回归问题是指曾经正常工作的代码中再次出现的错误。发现错误后,最佳做法是先编写一个能够重现该错误的测试。
测试失败后,持续修复代码,直到测试通过。这样,这个测试就能防止该错误再次出现。
it("handles empty input", function()
assert.are.equal(0, calc.sum({}))
end)什么是好的测试
好的测试应当快速、相互隔离且具有确定性。除非对网络、时间或随机值加以控制,否则测试不应依赖它们。
每个测试都应检查一种明确的行为。如果测试失败,名称应该让您无需阅读正文就能知道出了什么问题。
测试金字塔
测试金字塔建议编写大量小型单元测试、较少的集成测试,以及极少的端到端测试。单元测试成本低、速度快,因此应优先使用。
busted 主要是单元测试工具,不过也可以用它进行集成测试。
从容修改代码的信心
测试最深层的好处是带来自信。有了值得信赖的测试套件,您就可以大胆重构、升级依赖项,并更快地交付。
本课程将从基础开始讲解 busted:结构、断言,以及模拟对象和间谍等测试替身。
describe("feature", function()
it("still works after refactor", function()
assert.is_true(feature.enabled())
end)
end)快速检查
测试您对编写测试原因的理解。
回顾
测试是用于验证代码的代码。busted 是 Lua 的主流框架,会查找 _spec.lua 文件并报告通过或失败。
好的测试快速、相互隔离且具有确定性。它们能够捕获回归问题、充当文档,并让您有信心自由修改代码。
常见问题解答
「为什么要测试」课时是免费的吗?
是的 — 「为什么要测试」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Lua Academy 课程的其余内容,请升级到 CoddyKit PRO。 Lua Academy 课程共包含 4 节课。
「为什么要测试」这节课中我会学到什么?
在用户发现问题之前捕获错误。 你通过在浏览器中直接运行的动手代码来练习 Lua Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Lua Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Lua Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「为什么要测试」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Lua Academy 课中编写并运行代码吗?
能。每节 Lua Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。