0Pricing
Lua Academy · 课时

为什么要测试

在用户发现问题之前捕获错误。

为什么要测试 是 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 反馈 — 无需本地设置。

此课程中的所有课时

  1. 为什么要测试
  2. describe 和 it 代码块
  3. 断言
  4. 模拟对象与间谍
← 返回 Lua Academy