测试与版本管理
质量与语义化版本
测试与版本管理 是 CoddyKit 上的免费 Ruby Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Ruby Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Ruby Academy 课程共包含 4 节课。
为什么要测试 Ruby 包
由于 Ruby 包会被许多项目使用,一个错误可能影响所有人。自动化测试让您能够放心修改代码,并证明 Ruby 包仍然正常工作。
- 测试会记录预期行为。
- 它们能在发布前发现回归问题。
- 在采用 Ruby 包之前,严肃的用户通常会要求它们存在。
选择测试框架
两种常见选择是 Minitest(随 Ruby 提供,轻量)和 RSpec(DSL 丰富,非常常用)。两者都可以;请选择其中一种,并将其作为开发依赖添加到包规格文件中。
Minitest 示例
Minitest 测试是带有断言方法的普通类。下面是一个自包含示例,它会运行 Ruby 包的逻辑并检查结果。
require "minitest/autorun"
def greet(name)
"Hi, " + name
end
class GreetTest < Minitest::Test
def test_greet
assert_equal "Hi, Sam", greet("Sam")
end
end常用断言
实用的 Minitest 断言:
assert_equal expected, actualassert obj和refute objassert_nil valueassert_raises(Error) { ... }
每个测试都应检查一种明确的行为。
require "minitest/autorun"
class MathTest < Minitest::Test
def test_addition
assert_equal 4, 2 + 2
end
def test_truth
refute_nil 5
end
end运行并自动化测试
您通常会添加一个 Rake 任务,让 rake test 运行整个测试套件。持续集成随后会在每次推送时、使用多个 Ruby 版本运行相同的任务,以便尽早发现问题。
什么是语义化版本
语义化版本为版本号 MAJOR.MINOR.PATCH 赋予了含义:
- MAJOR:不兼容的接口变更。
- MINOR:新增功能,并保持向后兼容。
- PATCH:保持向后兼容的错误修复。
用户依靠这一规则来安全升级。
读取版本
对于 2.4.1:主版本号是 2,次版本号是 4,补丁版本号是 1。拆分字符串即可看到各个部分。
version = "2.4.1"
major, minor, patch = version.split(".")
puts "Major: " + major
puts "Minor: " + minor
puts "Patch: " + patch何时提升各个版本号部分
判断规则:
- 修复了错误,但没有更改接口?提升补丁版本号。
- 添加了功能,旧代码仍能正常工作?提升次版本号,并将补丁版本号重置为 0。
- 移除或更改了现有行为?提升主版本号,并将次版本号和补丁版本号重置为 0。
def bump_minor(version)
major, minor, _patch = version.split(".").map(&:to_i)
major.to_s + "." + (minor + 1).to_s + ".0"
end
puts bump_minor("1.3.5")版本约束
用户可以在依赖配置文件中使用运算符固定 Ruby 包的版本:
'~> 1.4'允许从 1.4 起、但不包括 2.0 的版本(悲观约束)。'>= 1.4'允许任何更新的版本。'= 1.4.2'锁定一个确切的版本。
悲观约束 ~> 最为常见,在更新与安全性之间取得了平衡。
维护变更日志
维护一个 CHANGELOG.md,列出每个版本的变更内容。它会告诉用户新增了什么、哪些内容发生了破坏性变化,以及如何迁移。每次提升版本号时,都应同时添加一条变更日志记录。
预发布版本
像 2.0.0.beta1 这样的版本表示不稳定的预览版。用户必须明确选择安装它们,因此您可以先发布早期版本进行测试,而不会影响正常安装。
version = "2.0.0.beta1"
puts "Pre-release? " + version.include?("beta").to_s快速检查
检查您对版本管理的理解。
回顾:测试与版本管理
您学习了如何保持 Ruby 包的可靠性:
- 使用 Minitest 或 RSpec 编写测试,并通过 Rake 和持续集成实现自动化。
- 遵循语义化版本规则:MAJOR.MINOR.PATCH。
- 针对错误修复、功能新增或破坏性变更,提升正确的版本号部分。
- 使用
~>约束,并维护变更日志。
接下来,我们将把 Ruby 包发布到 RubyGems。
常见问题解答
「测试与版本管理」课时是免费的吗?
是的 — 「测试与版本管理」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Ruby Academy 课程的其余内容,请升级到 CoddyKit PRO。 Ruby Academy 课程共包含 4 节课。
「测试与版本管理」这节课中我会学到什么?
质量与语义化版本 你通过在浏览器中直接运行的动手代码来练习 Ruby Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Ruby Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Ruby Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。
「测试与版本管理」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Ruby Academy 课中编写并运行代码吗?
能。每节 Ruby Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- Gem 结构
- 编写代码
- 测试与版本管理
- 发布到 RubyGems