0Pricing
Ruby Academy · 课时

测试与版本管理

质量与语义化版本

测试与版本管理 是 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, actual
  • assert obj 和 refute obj
  • assert_nil value
  • assert_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 反馈 — 无需本地设置。

此课程中的所有课时

  1. Gem 结构
  2. 编写代码
  3. 测试与版本管理
  4. 发布到 RubyGems
← 返回 Ruby Academy